超级无敌裸的树状数组
#include#include #include #include #include #include #include using namespace std;int c[50005],n;int lowbit(int x){ return x&(-x);}int sum(int x){ int ret=0; while(x>0) { ret+=c[x];x-=lowbit(x); } return ret;}void add(int x,int d){ while(x<=n) { c[x]+=d; x+=lowbit(x); }}int main(){ int t,a,L,R,i,j,k; scanf("%d",&t); for(k=1;k<=t;++k) { scanf("%d",&n); for(i=0;i<=n;++i) c[i]=0; for(i=1;i<=n;++i) { scanf("%d",&a); add(i,a); } string b; printf("Case %d:\n",k); while(cin>>b&&b!="End") { scanf("%d%d",&L,&R); if(b=="Query") { printf("%d\n",sum(R)-sum(L-1)); } else if(b=="Add") add(L,R); else add(L,-R); } } return 0;}