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