#include <cstdio>
#include <cstring>
using namespace std;
const int maxn=50005;
int t[maxn*4],h[maxn],a[maxn];
int N,T,tl,tr,ans;
char x;
void Pre()
{
memset(t,0,sizeof t);
}
void Build(int k,int l,int r)
{
if (l==r)
{
h[l]=k;
t[k]=a[l];
return;
}
int mid=(l+r)/2;
Build(k*2,l,mid);Build(k*2+1,mid+1,r);
t[k]=t[k*2]+t[k*2+1];
}
void add(int x,int y)
{
for (int i=h[x];i;i>>=1) t[i]+=y;
}
int getsum(int k,int l,int r)
{
if (r<tl) return 0;
if (tr<l) return 0;
if ((tl<=l)&&(r<=tr)) return t[k];
int mid=(l+r)/2;
return getsum(k*2,l,mid)+getsum(k*2+1,mid+1,r);
}
void Work()
{
scanf("%d",&N);
for (int i=1;i<=N;i++) scanf("%d",&a[i]);
Build(1,1,N);
x=getchar();
x=getchar();
while (x!='E')
{
if (x=='A')
{
for (int i=1;i<=2;i++) x=getchar();
scanf("%d %d",&tl,&tr);
add(tl,tr);
continue ;
}
if (x=='S')
{
for (int i=1;i<=2;i++) x=getchar();
scanf("%d %d",&tl,&tr);
add(tl,-tr);
continue;
}
if (x=='Q')
{
for (int i=1;i<=4;i++) x=getchar();
scanf("%d %d",&tl,&tr);
ans=getsum(1,1,N);
printf("%d\n",ans);
}
x=getchar();
x=getchar();
}
x=getchar();
x=getchar();
}
int main()
{
freopen ("a.in","r",stdin);
freopen ("a.out","w",stdout);
scanf("%d",&T);
for (int i=1;i<=T;i++)
{
printf("Case %d:\n",i);
Pre();
Work();
}
return 0;
}
HDU1166
最新推荐文章于 2019-04-13 15:43:06 发布