敌兵布阵

#include<stdio.h>
#define MAX 50001
int sum[MAX*4];
int s;
void js(int k,int j,int d)
{
    if(k==j)
    {
        scanf("%d",&sum[d]);
        return ;
    }
    int m;
    m=(k+j)/2;
    js(k,m,d*2);
    js(m+1,j,d*2+1);
    sum[d]=sum[d*2]+sum[d*2+1];
}
void Add(int z,int w,int k,int j,int d)
{
     if(w==k&&w==j)
     {
          sum[d]+=z;
          return;
     }
     int m;
     m=(k+j)/2;
     if(w<=m) Add(z,w,k,m,d*2);
     else
     Add(z,w,m+1,j,d*2+1);
    sum[d]=sum[d*2]+sum[d*2+1];
}
void Que(int z,int y,int k,int j,int d)
{
    if(z<=k&&j<=y)
    {
        s+=sum[d];
        return;
    }
    int m;
    m=(k+j)/2;
    if(z<=m)  Que(z,y,k,m,d*2);
    if(y>m)   Que(z,y,m+1,j,d*2+1);
}
int main()
{
    int t,cnt=1;
    int n;
    char ss[10];
    int a,b;
    scanf("%d",&t);
    while(t--)
    {
  scanf("%d",&n);
        js(1,n,1);
  printf("Case %d:\n",cnt++);
        while(scanf("%s",ss)!=EOF)
        {
           if(ss[0]=='E') break;
           scanf("%d %d",&a,&b);
           if(ss[0]=='Q')
           {
             s=0;
             Que(a,b,1,n,1);
             printf("%d\n",s);
             continue;
           }
           if(ss[0]=='S') b=-b;
           Add(b,a,1,n,1);
        }
    }
    return 0;
}

posted @ 2012-07-10 09:12  zhuiy  阅读(107)  评论(0编辑  收藏  举报