代码
#include<bits/stdc++.h>
using namespace std;
int n,m,k,a,b,lc,rc,mid;
struct node
{
int l,r,mx;
}tree[100010];
void build(int k,int l,int r)
{
tree[k].l=l;
tree[k].r=r;
if(l==r)
{
tree[k].mx=0;
return ;
}
int mid=(l+r)/2;
lc=k*2;
rc=k*2+1;
build(lc,l,mid);
build(rc,mid+1,r);
tree[k].mx=tree[lc].mx+tree[rc].mx;
}
void update(int k,int i,int v)
{
if(tree[k].l==tree[k].r && tree[k].l==i)
{
tree[k].mx+=v;
return ;
}
int mid,lc,rc;
mid=(tree[k].l+tree[k].r)/2;
lc=k*2;
rc=k*2+1;
if(i<=mid)
update(lc,i,v);
else
update(rc,i,v);
tree[k].mx=tree[lc].mx+tree[rc].mx;
}
int query(int k,int l,int r)
{
if(tree[k].l>=l && tree[k].r<=r)
return tree[k].mx;
int mid,lc,rc;
mid=(tree[k].l+tree[k].r)/2;
lc=k*2;
rc=k*2+1;
int Max=INT_MIN;
if(l<=mid)
{
int c=query(lc,l,r);
Max+=c;
}
if(r>mid)
{
int c=query(rc,l,r);
Max+=c;
}
return Max;
}
int main()
{
// ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin>>n>>m;
build(1,1,n);
for(int i=1;i<=m;i++)
{
cin>>k>>a>>b;
if(k==0)
update(1,a,b);
else
cout<<query(1,a,b)<<"\n";
}
}