链接:点击打开链接
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
#define MAXN 50005
int tree[MAXN],n;
int LowBit(int position){
return position&(-position);
}
void Add(int position,int value){
for(int i=position;i<=n;i+=LowBit(i))
tree[i]+=value;
return;
}
int Get(int position){
int result=0;
for(int i=position;i>0;i-=LowBit(i))
result+=tree[i];
return result;
}
int main(){
int t;
int x,y,temp;
char oper[10];
cin>>t;
for(int i=1;i<=t;i++){
memset(tree,0,sizeof(tree));
printf("Case %d:\n",x);
cin>>n;
for(int j=1;j<=n;j++){
scanf("%d",&temp);
Add(j,temp);
}
while(scanf("%s",oper)!=EOF&&oper[0]!='E'){
cin>>x>>y;
switch(oper[0]){
case 'Q':printf("%d\n",Get(y)-Get(x-1));
break;
case 'A':Add(x,y);
break;
case 'S':Add(x,-y);
break;
}
}
}
return 0;
}