CF101480G Greenhouse Growth
CF101480G Greenhouse Growth
题目大意
给出长度为\(n\)的序列\(a\),进行下列\(q\)次操作
- \(\text{if} a_i < a_{i-1} or (a_i=a_{i-1} and a_{i-1}\to a_{i-1}+1) \text{then} a_{i} \to a_{i}+1\)
- \(\text{if} a_i < a_{i+1} or (a_i=a_{i+1} and a_{i+1}\to a_{i+1}+1) \text{then} a_{i} \to a_{i}+1\)
求最后的序列。
- \(n, q \le 3\times 10^6\)
解法
- 每次操作连续段的个数不增
- 每次操作单调上升/下降的区间内部差值不变
- 最大值不变
注意到第二条性质,我们考虑维护差分数组。
那么每次操作我们只会操作连续大于0\小于的段的段首\段末
注意到当段首\段末的值等于0时该位置不会再更改,相当于将该位置左右两段合并。
我们用堆维护最先变为0的位置(分长度大于1\等于1讨论),修改时全局标记即可。