树状数组裸题
学习主席树,修改操作需要树状数组套线段树,就顺便练练
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXN 50005
int ai,n,flag;
int b[MAXN]={0};
char str[20]={'\0'};
int lowbit(int x)
{
return x&(-x);
}
void add(int s,int c)
{
while(s<=n)
{
b[s]+=c;
s+=lowbit(s);
}
}
int count(int s)
{
int ret=0;
while(s>0)
{
ret+=b[s];
s-=lowbit(s);
}
return ret;
}
int main()
{
int i,j,T;
int site,num;int l,r;
#ifndef ONLINE_JUDGE
freopen("hdu1166.in","r",stdin);
freopen("hdu1166.out","w",stdout);
#endif
scanf("%d",&T);
for(i=1;i<=T;i++)
{
printf("Case %d:\n",i);
scanf("%d",&n);
memset(b,0,sizeof(b));
for(j=1;j<=n;j++){scanf("%d",&ai);add(j,ai);}
flag=1;
while(flag)
{
scanf("%s",str);
switch(str[0])
{
case 'A':scanf("%d%d",&site,&num); add(site,num); break;
case 'S':scanf("%d%d",&site,&num); add(site,-num); break;
case 'Q':scanf("%d%d",&l,&r);
printf("%d\n",count(r)-count(l-1)); break;
case 'E':flag=0; break;
}
}
}
#ifndef ONLINE_JUDGE
fclose(stdin);
fclose(stdout);
#endif
return 0;
}