*Educational Codeforces Round 168 (Rated for Div. 2)
A
直接暴力。
B
(没看见初始只有一个块)
可以状压每一列,然后块的个数就只和当前列以及前一列有关了。
于是直接枚举。
C
贪心,用一个栈存左括号位置,如果能配就配,否则就压入栈中。
D
二分答案,然后从上到下判断,容易计算当前点需要操作的次数。
如果当前点操作次数超过所需次数,则子树中所有点权会更小,显然不优。
所以就可以确定需要子树中的点权至少达到多少。
在叶子上判断即可。
E
考虑根号分治。
对于 \(x\le B\) 的询问,我们将其合到一起做,时间复杂度 \(O(qB)\)。
对于 \(x\operatorname{>}B\) 的询问,容易发现等级不超过 \(\lfloor\frac{n}{B}\rfloor\)。
于是可以预处理 \(sum_{i,j}\) 表示前 \(j\) 个数中大于等于 \(i\) 的个数以及 \(pos_{i,j}\) 表示 \(\min(p)(sum_{i,p}\ge j)\)。
然后就可以以 \(O(1)\) 的复杂度求出下一次升级的位置,就能求出到达 \(i\) 之前的等级了。
注意到 \(B=\sqrt n\) 会 MLE,于是 \(B=2\sqrt n\)。

浙公网安备 33010602011771号