Time Limit: 2000/1000 MS
(Java/Others) Memory Limit: 65536/32768 K
(Java/Others)
Total Submission(s): 35307 Accepted
Submission(s): 14974
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int f[50010]; inline int lowbit(int x){ return x&(-x);} inline void add(int x,int d,int n) { while(x<=n) { f[x]+=d;x+=lowbit(x); } } inline int sum(int x) { int ret=0; while(x>=1) { ret+=f[x];x-=lowbit(x); } return ret; } int main() { int T,n,i,j,a,b,p; char s[20]; scanf("%d",&T); for(i=1;i<=T;i++) { scanf("%d",&n); fill(f,f+n+1,0); for(j=1;j<=n;j++) scanf("%d",&p),add(j,p,n); printf("Case %d:\n",i); while(scanf("%s",s) && strcmp(s,"End")!=0) { scanf("%d %d",&a,&b); if(strcmp(s,"Add")==0) add(a,b,n); else if(strcmp(s,"Sub")==0) add(a,-b,n); else if(strcmp(s,"Query")==0) printf("%d\n",sum(b)-sum(a-1)); } } return 0; }
原文:http://www.cnblogs.com/xiong-/p/3585265.html