题目链接
树状数组入门题
//树状数组
#include<cstdio>
#include<cstring>
const int N=5e4+10;
int c[N*2],n;
char s[10];
int lowbit(int x){
return x&(-x);
}
void add(int x,int v){
while(x<=n){
c[x]+=v;
x+=lowbit(x);
}
}
int getsum(int x){
int ret=0;
while(x){
ret+=c[x];
x-=lowbit(x);
}
return ret;
}
int main(){
//freopen("in.txt","r",stdin);
int i,t,j,x,y,v;
scanf("%d",&t);
for(i=1;i<=t;i++){
memset(c,0,sizeof(c));
printf("Case %d:\n",i);
scanf("%d",&n);
for(j=1;j<=n;j++){
scanf("%d",&v);
add(j,v);
}
while(scanf("%s",s)!=EOF){
if(strcmp(s,"End")==0)break;
else if(strcmp(s,"Query")==0){
scanf("%d%d",&x,&y);
printf("%d\n",getsum(y)-getsum(x-1));//此处写成x
}
else if(strcmp(s,"Add")==0){
scanf("%d%d",&x,&y);
add(x,y);
}
else if(strcmp(s,"Sub")==0){
scanf("%d%d",&x,&y);
add(x,-y);
}
}
}
return 0;
}