CF101480G Greenhouse Growth

CF101480G Greenhouse Growth

题目大意

给出长度为\(n\)的序列\(a\),进行下列\(q\)次操作

  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\)
  2. \(\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\)

解法

  1. 每次操作连续段的个数不增
  2. 每次操作单调上升/下降的区间内部差值不变
  3. 最大值不变

注意到第二条性质,我们考虑维护差分数组。
那么每次操作我们只会操作连续大于0\小于的段的段首\段末

注意到当段首\段末的值等于0时该位置不会再更改,相当于将该位置左右两段合并。
我们用堆维护最先变为0的位置(分长度大于1\等于1讨论),修改时全局标记即可。

posted @ 2021-03-31 15:36  鼠曲雪兔子  阅读(60)  评论(0编辑  收藏  举报