#include <stdio.h>
#include <string.h>
#define IN(x) scanf("%d",&x)
int enemy[50005];
int tree[50005];
int num;
void built(int idx,int value)
{
while(idx<=num)
{
tree[idx]+=value;
idx+=(idx&-idx);
}
}
int read(int idx){
int sum=0;
while(idx>0){
sum+=tree[idx];
idx-=(idx&-idx);
}
return sum;
}
int getsum(int x,int y)
{
return read(y)-read(x-1);
}
int main()
{
int T;
IN(T);
for(int ii=1;ii<=T;++ii)
{
char cmd[10];
IN(num);
memset(enemy,0,sizeof(enemy));
memset(tree,0,sizeof(tree));
for(int i=1;i<=num;++i)
{
IN(enemy[i]);
built(i,enemy[i]);
}
printf("Case %d:\n",ii);
int x,y;
// getchar();
scanf("%s",cmd);
while(strcmp(cmd,"End")!=0)
{
IN(x);IN(y);
if(strcmp(cmd,"Query")==0)
printf("%d\n",getsum(x,y));
if(strcmp(cmd,"Add")==0)
built(x,y);
if(strcmp(cmd,"Sub")==0)
built(x,-y);
scanf("%s",cmd);
}
}
return 0;
}
树状数组简单运用 hdu1166
最新推荐文章于 2018-02-03 15:22:13 发布