hdu1166 简单线段树 (二)

2014-11-24 02:21:08 · 作者: · 浏览: 3
return ;
}
int mid=(node[root].l+node[root].r)/2;
if(pos<=mid)
update(root<<1,pos,u);
else
update(root<<1|1,pos,u);
node[root].sum=node[root<<1].sum+node[root<<1|1].sum;
}
int query(int root,int L,int R)
{
if(L<=node[root].l&&node[root].r<=R)
{
return node[root].sum;
}
int mid=(node[root].l+node[root].r)/2;
int ret=0;
if(L<=mid)
ret+=query(root<<1,L,R);
if(R>mid)
ret+=query(root<<1|1,L,R);
return ret;
}

int main()
{
int t,n;
scanf("%d",&t);
int cc=1;
while(t--)
{
scanf("%d",&n);
for(int i=1;i<=n;i++)

scanf("%d",&num[i]);
build(1,1,n);
char s[10];
scanf("%s",s);
printf("Case %d:\n",cc++);
while(strcmp(s,"End")!=0)
{
int x,y;
scanf("%d%d",&x,&y);
if(s[0]=='Q')
{
if(x>y)
swap(x,y);
cout< }
else if(s[0]=='A')
{
num[x]+=y;
update(1,x,num[x]);
}
else
{
num[x]-=y;
update(1,x,num[x]);
}
scanf("%s",s);
}
}
}