一环状的数组,求满足:从某一位置开始任意长度的元素和都大于等于0
既然数组是循环的,自然想到先复制一遍,然后求sum[i],
枚举每一个长度为n的区间,看最小值是否满足即可。
很明显可以线段树解决,但是 单调队列在这里的适用性更强
#include <stdio.h>
#define N 2000002
int a[N],sum[N],que[N];
int main()
{
int i,n;
while(scanf("%d",&n) == 1 && n)
{
for(i = 1; i <= n; ++i)
{
scanf("%d",a + i);
a[i + n] = a[i];
}
int nn = n << 1;
for(i = 1; i <= nn; ++i)
sum[i] = sum[i-1] + a[i];
int head = 0,tail = 0;
int res = 0;
for(i = 1; i < nn; +&#