codeforces-#670-D
九月 18, 2020
题意
给出一个长度为n<1e5的数组a
要求构造出两个数组b和c,使得满足以下条件:
- b数组非减
- c数组非增
- bi+ci=ai
多组询问
每次将数组a的区间[L,R]的数+x
问能构造出两个数组中最大的数max(c1,bn)最小是多少
题解
根据如下方式贪心构造数组c和b:
b数组非减
那么$a_i>a_{i-1}$时令$c_i=c_{i+1}$
则有 $b_i>b_{i-1}$
c数组非增
那么$a_i<a_{i-1}$时令$b_i=b_{i+1}$
则有 $c_i<c_{i-1}$
求b1到bn的增量为$sum=∑_{i=2}^n max(0,a_i−a_{i−1}) $
于是对于$b_1=a_1-c_1,b_n=b_1+sum$
那么有$max(c_1,b_n)=max(c_1,a_1-c_1+sum)$
为了让最大值最小 $c_1=(a_1-sum)/2$
对于每次询问将a的区间[L,R]的数+x
考虑到我们求得答案所需要的量
实际上只会改变$a_L-a_{L-1},a_{R+1}-a_R$ 以及a1(可能会被改变)
所以每次询问更新a1和sum就能O1求出解
1 |
|
查看评论