思路:树状数组或线段树 模板题。。。
Code :
//树状数组
#include<iostream>
using namespace std;
const int MAX_N=50005;
int n,T;
int a[MAX_N],c[MAX_N];
int Lowbit(int x);
void Update(int id,int x);
int Sum(int id);
int main()
{
ios::sync_with_stdio(false);
cin>>T;
for(int t=1;t<=T;++t)
{
cin>>n;
for(int i=1;i<=n;c[i]=0,++i)
cin>>a[i];
for(int i=1;i<=n;++i)
Update(i,a[i]);
cout<<"Case "<<t<<":"<<endl;
string str;
int l,r,x;
while(cin>>str&&str!="End"){
if(str=="Add"){
cin>>l>>x;
Update(l,x);
}else if(str=="Sub"){
cin>>l>>x;
Update(l,-x);
}else if(str=="Query"){
cin>>l>>r;
cout<<Sum(r)-Sum(l-1)<<endl;
}
}
}
return 0;
}
int Lowbit(int x)
{
return x&(-x);
}
void Update(int id,int x)
{
while(id<=n){
c[id]+=x;
id+=Lowbit(id);
}
}
int Sum(int id)
{
int ans=0;
while(id>0){
ans+=c[id];
id-=Lowbit(id);
}
return ans;
}//树状数组
#inclu