题意
给定一个D,以及一个长度为N的序列a,顺序执行这些数字:
对于一个数字x,会使得D=min(D,abs(D-x))
有Q次询问,每次询问独立,给出i,能否修改a[i],使得D最后不为0.
n,q<=500000
解法
我们设Low[i],表示当前D执行i+1..n的数字之后,不为0的最小值。
我们知道,对于每一次询问i,
求出前i-1个数字执行后的结果D,
通过修改a[i],我们可以使得D变成[1,D],
那么如果D>=Low[i+1]就回答"YES",否则回答"NO"。
现在问题变成了怎样求出Low数组,
[边界:Low[n+1]=1,
Low[i]=Low[i+1]+a[i]*(a[i]<2*Low[i+1])]
当a[i]<2*Low[i+1]时,这次的数字操作有效,
为了走到Low[i+1],所以Low[i]要加上a[i].