简单题:
#include <iostream>
#include <cstdio>
using namespace std;
const int maxn = 55000;
int st[maxn << 2];
void GetSum(int rt){ st[rt] = st[rt << 1] + st[rt << 1 | 1]; }
void BiuldTree(int rt, int l, int r){
if(l == r){
scanf("%d",&st[rt]);
return ;
}
int mid = (l + r) >> 1;
BiuldTree(rt << 1, l, mid);
BiuldTree(rt << 1 | 1, mid + 1, r);
GetSum(rt);
}
void Update(int a, int b, int rt, int l, int r){
if(l == r){
st[rt] += b;
return ;
}
int mid = (l + r) >> 1;
if(a <= mid) Update( a, b, rt << 1, l, mid);
else Update( a, b, rt << 1 | 1, mid + 1, r);
GetSum(rt);
}
int Query(int a, int b, int rt, int l, int r){
if(a <= l && b >= r)
return st[rt];
int mid = (l + r) >> 1;
int sum = 0;
if(a <= mid) sum += Query( a, b, rt << 1, l, mid);
if(mid < b) sum += Query( a, b, rt << 1 | 1, mid + 1, r);
return sum;
}
int main()
{
int T,cnt = 0;
scanf("%d",&T);
while(T--){
int n;
printf("Case %d:\n",++cnt);
char s[10];
scanf("%d",&n);
BiuldTree( 1, 1, n);
while(scanf("%s",s)){
if(s[0] == 'E') break;
int x, y;
scanf("%d %d", &x, &y);
if(s[0] == 'S') Update( x, -y, 1, 1, n);
else if(s[0] == 'A') Update( x, y, 1, 1, n);
else printf("%d\n",Query( x, y, 1, 1, n));
}
}
return 0;
}