D - Glitchy Robot Editorial by yuyu1213


セグ木で解けます。

操作後の数列を \(B = (B_1, B_2, \dots, B_N)\) とします。各区間 \([l, r)\) に対して、

  • \(\mathrm{delta} = \displaystyle\sum_{l \leq i < r} B_i\)
  • \(\mathrm{maxi} = \displaystyle\max_{l \leq i \leq r} \sum_{l \leq j < i}B_j\)
  • \(\mathrm{mini} = \displaystyle\min_{l \leq i \leq r} \sum_{l \leq j < i}B_j\)

を持たせると、これはモノイドを成します。

答えは

\[\max_{0 \leq i \leq N}\sum_{1 \leq j \leq i}B_j - \min_{0 \leq i \leq N}\sum_{1 \leq j \leq i}B_j+ 1\]

と表せるので、一点更新・区間積取得ができるセグメント木を用いて \(O(N\log N)\) 時間で解けました。

実装例(39 ms):https://atcoder.jp/contests/abc483/submissions/80695760