树状数组的入门题。。s[N]表示当前下标控制的所有元素的和。。。
对于p-lowbit(p)都不被p包含。。
而对于p+lowbit(p) 都包含p。。。。。
#include<iostream>
#include<string.h>
#include<string>
#include<cstdio>
#define N 50005
using namespace std;
int s[N];
int lowbit(int x)
{return x&(-x);}
void update(int x,int a)
{
while(x<N)
{ s[x]+=a;
x+=lowbit(x);
}
}
int Quary(int x)
{ int sum=0;
while(x>0)
{ sum+=s[x];
x-=lowbit(x);
}
return sum;
}
int main()
{ int T;
scanf("%d",&T);
for(int k=1;k<=T;++k)
{ memset(s,0,sizeof(s));
int n,a,b;
int tot=0;
scanf("%d",&n);
for(int i=1;i<=n;++i)
{ int a;
scanf("%d",&a);
update(i,a);
}
printf("Case %d:\n",k);
char s1[10];
while(scanf("%s",s1),strcmp(s1,"End"))
{ scanf("%d%d",&a,&b);
if(s1[0]=='E') break;
else if(s1[0]=='A') update(a,b);
else if(s1[0]=='S')update(a,-b);
else printf("%d\n",Quary(b)-Quary(a-1));
}
}return 0;
}