P1667 数列
题意
给定一个序列 \(A\),求进行最少多少次操作可以使得序列 \(A\) 全为正数。
定义一次操作:
选择一个区间 \([l,r]\) 满足 \(\sum\limits_{i = l}^r A_i < 0\) ,其中 \(1 < l \le r < n\)。
令 \(S = \sum\limits_{i = l}^r A_i\) ,对于 \(A_{l - 1}\) 和 \(A_{r + 1}\) 分别加上 \(S\),\(A_l\) 和 \(A_r\) 分别减去 \(S\)(如果 \(l = r\) 就减两次)

解法
设 \(s\) 为前缀和,可以发现,对于每次修改,相当于只修改 \(s_{l-1}\) 和 \(s_{r}\),因为 \(S=s_r-s_{l-1}\),所以相当于交换这两个,最后使序列单调递增即可。

浙公网安备 33010602011771号