【输入样例】
10 20 0 1 10 1 1 4 0 6 6 1 4 10 1 8 9 1 4 9 0 10 2 1 1 8 0 2 10 1 3 9 0 7 8 0 3 10 0 1 1 1 3 8 1 6 9 0 5 5 1 1 8 0 4 2 1 2 8 0 1 1
【输出样例】
10 6 0 6 16 6 24 14 50 41
const int N=1e5+5;
int n,m,t;
int i,j,k;
ll sum[N*4];
void build(int l,int r,int id)
{
sum[id]=0;
if(l==r) return ;
int mid=l+r>>1;
build(l,mid,id*2);
build(mid+1,r,id*2+1);
sum[id]=sum[id*2]+sum[id*2+1];
}
void update(int pos,int val,int l,int r,int id)//单点修改
{
int mid=l+r>>1;
if(l==r){ sum[id]+=val; return ; }
else{
if(pos<=mid) update(pos,val,l,mid,id*2);
else update(pos,val,mid+1,r,id*2+1);
sum[id]=sum[id*2]+sum[id*2+1];
}
}
ll query(int ql,int qr,int l,int r,int id)//区间查询
{
if(l>=ql && qr>=r) return sum[id];
int mid=l+r>>1;
ll ans=0;
if(ql<=mid) ans+=query(ql,qr,l,mid,id*2);
if(qr>mid) ans+=query(ql,qr,mid+1,r,id*2+1);
return ans;
}
int main()
{
//IOS;
while(sdd(n,m)==2){
build(1,n,1);
while(m--){
int a,b;
sddd(k,a,b);
if(k==0) update(a,b,1,n,1);
else pll( query(a,b,1,n,1) );
}
}
//PAUSE;
}