好几天没更新了
题解 #
首先,先定义这个函数fk(i)=ai+ai+1+⋯+ai+k−1,也就是从i开始往后连续k个数的和。
然后我们证明如果 k 和一个答案那么 2k 也是一个答案:f2k(i)=fk(i)+fk(i+k)>0。因此我们从能找到一个大于2n的答案。
然后我们分类讨论,先考虑x≥0的情况。如果 k 是答案,因为fk+1(i)=fk(i)+ai+1=fk(i)+x>0,所以 k+1 也是一个答案,因此我们只要判断k=n是不是答案就行了。
最后,考虑x≤0,我们需要借助以下前缀和,定义prei=a0+a1+⋯+ai−1,i>0 并且 pre0=0. 我们需要找到 k 使得对于所有0≤i≤n−k:
prei+k−prei prei>0<prei+k
因为k>2n,“窗口”之后的所有数字都是x,所以上面的不等式可以写成这样:
prei prei+x⋅(n−i)<pren−x⋅(n−k−i)<pren+x⋅k
对于每一个i,对应的 k 是n−1,也就是说不等式左边的最大值如果小于pren+x⋅(n−i),那么k=n−i是一个答案。
Code #