hdu 4193(单调队列)

#include 
#define N 2000002

int a[N],sum[N],q[N];
int main()
{
    int i,n,ans;
    while(~scanf("%d",&n) && n)
    {
        for (i=1;i<=n;i++){
            scanf("%d",sum+i);
            sum[i+n]=sum[i];
        }
        int m=n*2;
        for (i=1;i<=m;i++) sum[i]+=sum[i-1];
        int head=0,tail=0;
        ans=0;
        for (i=1;isum[i]) tail--;
            q[tail++]=i;
            if (i>=n && sum[q[head]]>=sum[i-n]) ans++;
            if (i-q[head]>=n) head++;
        }
        printf("%d\n",ans);
    }
    return 0;
}

你可能感兴趣的:(hdu)