Three Sequences
Three Sequences
题意:
给一个数组 \(a\) , 构造两个数组 \(b\) , \(c\) 。 使得 $a_i = b_i + c_i $ , 且 \(b\) 是非升序列, \(c\) 是非降序列。求 \(Min(Max(b_i,c_i))\)
有 \(q\) 次询问,每次询问给出三个数字 \(l,r,x\) , 询问区间 \([l,r]\) 加上 \(x\) 后的 \(Min(Max(b_i,c_i))\)
打比赛的时候不查询我都没有想到怎么求 \(Min(Max(b_i,c_i))\)
wc,理解错题意了,这个 \(Max(b_i,c_i)\) 的意思是整个数组 \(b\) ,\(c\) 里面的最大值。
那么问题就变成了最小化 \(Max(b_n,c_1)\)
思路:
最小化 \(Max(b_n,c_1)\) , 因为 \(c\) 是非增的,所以后面的 \(c\) 可以尽可能多的降,当\(c_1\) 确定的时候,\(b_1\) 也确定了,要使 \(b_n\) 尽可能的小,所以产生了如下的策略
若 \(a_i > a_{i-1}\)
则把多出来的那部分加到 \(b\) 上去, \(c\) 保持不变,因为如果 \(c\) 减小的话 ,\(b\) 要增加更多
若\(a_i < a_{i-1}\)
则 \(b\) 不变,\(c\) 减去那一部分
而查询的时候,只有两个端点受到了影响。