代码
#include<iostream>
using namespace std;
struct xds{
int l,r;
long long int sum;
}res[4000005];
long long int a[1000005];
void pushup(int id){
res[id].sum=res[id*2].sum+res[id*2+1].sum;
}
void build(int id,int l,int r){
res[id].l=l;
res[id].r=r;
if(l==r){
res[id].sum=a[l];
return;
}
int mid=(l+r)/2;
build(id*2,l,mid);
build(id*2+1,mid+1,r);
pushup(id);
}
long long int query(int id,int l,int r){
int L=res[id].l,R=res[id].r;
if(l<=L&&R<=r){
return res[id].sum;
}
int mid=(L+R)/2;
long long int ans=0;
if(l<=mid)
ans+=query(id*2,l,r);
if(r>mid)
ans+=query(id*2+1,l,r);
return ans;
}
void change(int id,int pos,long long int k){
int l=res[id].l,r=res[id].r;
if(l==r){
res[id].sum+=k;
return;
}
int mid=(l+r)/2;
if(pos<=mid)
change(id*2,pos,k);
else
change(id*2+1,pos,k);
pushup(id);
}
int main(){
int n,q;
cin>>n>>q;
for(int i=1;i<=n;i++){
cin>>a[i];
}
build(1,1,n);
while(q--){
int b,c,d;
cin>>b>>c>>d;
if(b==1)
change(1,c,d);
else
cout<<query(1,c,d)<<endl;;
}
}