CF101480G Greenhouse Growth

CF101480G Greenhouse Growth

题目大意

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

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

解法

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

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

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

原文地址:https://www.cnblogs.com/BunnyLutts/p/14601759.html