标签:
题目链接:
Time Limit: 4000/2000 MS (Java/Others)
Memory Limit: 131072/131072 K (Java/Others)
/* 5358 1638MS 3120K 1119 B G++ 2014300227*/ #include <bits/stdc++.h> using namespace std; const int N=1e5+4; typedef long long ll; int n; ll a[N],sum[N]; int main() { int t; scanf("%d",&t); while(t--) { scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%lld",&a[i]); } sum[0]=0; a[n+1]=0; for(int i=1;i<=n+1;i++) { sum[i]=sum[i-1]+a[i]; } ll ans=0,num=0; ll L=0,R=1,len; for(int i=0;i<=33;i++) { num=0; int l=1,r=1; for(int j=1;j<=n;j++) { l=max(j,l); while(l<=n&&sum[l]-sum[j-1]<L)l++; r=max(r,l); while(r<=n&&sum[r]-sum[j-1]<=R&&sum[r]-sum[j-1]>=L)r++; len=r-l; num+=len*(ll)j+len*(l+r-1)/2; } L=R+1; R=2*L-1; ans+=num*(ll)(i+1); } printf("%lld\n",ans); } return 0; }
标签:
原文地址:http://www.cnblogs.com/zhangchengc919/p/5393720.html