题意:
求长度为n的循环数组中,长度为n不重复连续大于0的数字和的个数
只需要维护长度大于n就行
#include<bits/stdc++.h>
using namespace std;
int a[2000002];
int q[2000002];
int main(){
int n;
while(~scanf("%d",&n) && n){
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
a[i+n]=a[i];
}
int m=n*2;
for(int i=1;i<=n*2;i++){
a[i]+=a[i-1];
}
int left=0,right=0;
int ans=0;
for(int i=1;i<n*2;i++){
while(left<right && a[q[right-1]]>a[i]){
right--;
}
q[right++]=i;
if(i>=n && a[q[left]]>=a[i-n])
ans++;
if(i-q[left]>=n)
left++;
}
printf("%d\n",ans);
}
}