1 #include <iostream> 2 #include <cstdio> 3 using namespace std; 4 5 const int N=1e5+5; 6 int n,m; 7 int sum[N<<2]; 8 9 void Update(int rt){ 10 sum[rt]=sum[rt<<1]+sum[rt<<1|1]; 11 } 12 13 void Build(int l,int r,int rt){ 14 if(l==r) {scanf("%d",&sum[rt]);return;} 15 int mid=(l+r)>>1; 16 Build(l,mid,rt<<1); 17 Build(mid+1,r,rt<<1|1); 18 Update(rt); //不要忘记往上更新 19 } 20 21 void Add(int l,int r,int rt,int p,int v){ 22 if(l==r) {sum[rt]+=v;return;} 23 int mid=(l+r)>>1; 24 if(p<=mid) Add(l,mid,rt<<1,p,v); 25 else Add(mid+1,r,rt<<1|1,p,v); 26 Update(rt); //不要往上更新 27 } 28 29 int query(int l,int r,int rt,int L,int R){ 30 if(L<=l&&R>=r) return sum[rt]; 31 int mid=(l+r)>>1; 32 int sum=0; //递归 33 if(L<=mid) sum+=query(l,mid,rt<<1,L,R); 34 if(R>mid) sum+=query(mid+1,r,rt<<1|1,L,R); 35 return sum; 36 } 37 38 int main() 39 { 40 scanf("%d",&n); 41 Build(1,n,1); 42 scanf("%d",&m); 43 while(m--){ 44 int a,b,c; 45 scanf("%d%d%d",&a,&b,&c); 46 if(a==1) Add(1,n,1,b,c); 47 else if(a==2) printf("%d ",query(1,n,1,b,c)); 48 } 49 return 0; 50 }