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\) 就减两次)

image

解法

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

posted @ 2024-04-08 21:03  point_fish  阅读(6)  评论(0)    收藏  举报