奇妙的均摊复杂度线段树题,打开了 Segment Tree Beats 的大门(
考虑在线段树上维护区间最大值 / 最小值,2 操作时,若最大值的改变量与最小值的改变量相等,那么显然这一段区间的改变量都相等,直接区间打标记(意味着最大值和最小值最多相差 1),否则递归。
复杂度证明:
对于 i,j,若 |ai−aj|≤1,称 i,j 在同一段。
那么一次 1 操作最多会在区间首尾各分裂出一段,而相邻两端一定会在 O(logC) 次 2 操作之内合并,故复杂度为 O(nlognlogC)(假装 n,q 同阶,C 为值域。
代码:
1 |
|