原题链接:传送门
思路:树状数组
不会的请看他的博客:传送门
code:
//艹 把cin换成scanf过了,cin读取速度还真慢(可能读入量太大了...QAQ)
#include<iostream>
#include<string>
#include<cstring>
#include<cstdio>
using namespace std;
const int maxn=50005;
int a[maxn],c[maxn],n;
int lowbit(int x)
{
return x&(-x);
}
void updata(int i,int p)//更新
{
while(i<=n)
{
c[i]+=p;
i+=lowbit(i);
}
}
int getsum(int i)
{
int res=0;
while(i>0)
{
res+=c[i];
i-=lowbit(i);
}
return res;
}
int main()
{
int t,x,y,cnt=0;
cin>>t;
while(t--)
{
printf("Case %d:\n",++cnt);
memset(a,0,sizeof(a));
memset(c,0,sizeof(c));
cin>>n;
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
updata(i,a[i]);
}
string str;
while(cin>>str&&str[0]!='E')
{
scanf("%d%d",&x,&y);
if(str[0]=='A')
updata(x,y);
else if(str[0]=='S')
updata(x,-y);
else if(str[0]=='Q')
cout<<getsum(y)-getsum(x-1)<<endl;
}
}
return 0;
}