很裸的树状数组
#include <cstdio>
#include <cstring>
const int N=50005;
int a[N],t[N];
int n;
inline int lowbit(int i){return i&(-i);}
void update(int i,int j)
{
while(i<=n)
{
t[i]+=j;
i+=lowbit(i);
}
}
int sum(int i)
{
int res=0;
while(i)
{
res+=t[i];
i-=lowbit(i);
}
return res;
}
int query(int i,int j)
{
return sum(j)-sum(i-1);
}
int main()
{
// freopen("in","r",stdin);
int T,cas=0;
char s[10];
scanf("%d",&T);
while(T--)
{
printf("Case %d:\n",++cas);
scanf("%d",&n);
memset(t,0,sizeof(t));
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
update(i,a[i]);
}
int i,j;
while(scanf("%s",s),strcmp(s,"End"))
{
scanf("%d%d",&i,&j);
if(strcmp(s,"Add")==0)
{
update(i,j);
}
else if(strcmp(s,"Sub")==0)
{
update(i,-j);
}
else
{
printf("%d\n",query(i,j));
}
}
}
}