代码:
#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=max(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=max(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)
Max=max(Max,query(lc,l,r));
if(r>mid)
Max=max(Max,query(rc,l,r));
return Max;
}
int main()
{
//ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
build(1,1,n);
cin>>n>>m;
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";
}
}