树状数组的使用原理:
功能:快速地求区间和,对区间进行在线操作。
1.z[x]表示存储的是x到1的区间和
2.lowbit实现了快速地在n之内所有包括了y的区间(其实就是所有区间)加上y,从位置x开始加
cogs : 数列操作
#include <bits/stdc++.h>
using namespace std;
#define lb(x) x&(-x)
const int maxn=1e5+10;
char a[maxn];
int z[maxn],n,m;;
inline int read(){
int num=0,f=1; char c=getchar();
while(!isdigit(c)){if(c=='-') f=-1; c=getchar();}
while(isdigit(c)){num=(num<<1)+(num<<3)+(c^48); c=getchar();}
return num*f;
}
inline void insert(int x,int y){
for(;x<=n;x+=lb(x)) z[x]+=y;
}
inline int query(int x){
int ans=0;
for(;x;x-=lb(x)) ans+=z[x];
return ans;
}
int main(){
n=read();
for(int i=1;i<=n;i++){
int x; x=read(); insert(i,x);
}
m=read();
for(int i=1;i<=m;i++){
int l,r; cin>>a; l=read(); r=read();
if(a[0]=='S') insert(l,r);
else
cout<<query(r)-query(l-1)<<'\n';
}
}