单点修改,区间查询和。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<cmath>
#include<algorithm>
#include<queue>
#include<vector>
using namespace std;
#define Maxn 50005
int v[Maxn],n;
int Lowbit(int x){
return x&(-x);
}
void Add(int pos,int val){
while(pos<=Maxn){
v[pos]+=val;
pos+=Lowbit(pos);
}
}
int Sum(int End){
int sum=0;
while(End>0){
sum+=v[End];
End-=Lowbit(End);
}
return sum;
}
int main()
{
//freopen("F:\\11.txt","r",stdin);
int T;
int Case=0;
scanf("%d",&T);
while(T--){
memset(v,0,sizeof(v));
int a,b;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a);
Add(i,a);
}
char s[20];
printf("Case %d:\n",++Case);
while(cin>>s&&s[0]!='E'){
scanf("%d%d",&a,&b);
if(s[0]=='A'){
Add(a,b);
}
else if(s[0]=='S'){
Add(a,-b);
}
else if(s[0]=='Q'){
printf("%d\n",Sum(b)-Sum(a-1));
}
}
}
return 0;
}