\(A.\)
考虑合法的b序列长什么样,我们倒着做,把+变成-,在所有\(b_{i}>b_{i+1}\)的\(i\)操作\(b_{i}-b_{i+1}\)次前缀,后缀同理,最终要求b全部相等非负即满足条件。考虑前缀(后缀)操作本质是从某个地方开始后下降次数,那么我们设\(b_{0}=b_{n+1}=inf\),最终只需要判断\(\sum|b_{i}-b_{i+1}|\)是否小于等于\(2*inf\)即可。那么我们考虑将\(a\)变成一个合法的b。每次我们肯定是操作一段极长相同串。笛卡尔树上贪心即可
\(E.\)
每个答案对都可以看作\((x,y)\)归纳打表可知,将所有答案对按\(x+y\)排序后位于答案对下一个的必然是\((x,y+1),(x+1,y),(x+1,y+1)\)其中之一。那么每个数可以看作\(0,1,-1\)直接线段树操作即可。
\(F.\)
考虑维护覆盖每一个节点最大的关键点,直接扫描线,维护区间赋值,全局查询。ODT即可
\(K.\)
考虑对合法木棍方案数计数,防止算重,我们如果能延申横着的尽量延申,考虑最后一行延申到哪里,第一次延申到最后一行的列是哪个,发现如果我们知道这个后就能达到一个更小的子问题。
\(L.\)
我们先问n次问出所有正数信息,考虑负数怎么做,发现如果一个区间的边缘是负数的话,那么通过去掉边缘一定不劣,所以有用的区间的负数一定不在边缘,所以我们可以把所有极长负数段和极长正数段都缩成一个数。接下来考虑如何得知一个负数的值,我们首先考虑询问连续的3个,如果负数的值的绝对值比正数都小就可以得知,那么我们可以合并这一段数。否则说明这个负数的值的绝对值比较小的正数的值大,那么如果询问最小整数旁边的两个都不行,那么我们可以合并中间的3个数。发现询问次数小于n。
\(M.\)
相当于求相邻最少的。发现可能有两种情况,要么先左边再右边,要么先右边再左边。考虑从左向右dp,记录当前有多少向右的,当前是否已经和新的不相邻。
标签:CCPC,负数,延申,2023,考虑,正数,我们,Final,极长 From: https://www.cnblogs.com/ciuim/p/18429767