初学线段树,样例能过,求调
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,m;
struct tree{
int l,r;
int dat;
}t[400000];
void build(int p,int l,int r)
{
t[p].l=l,t[p].r=r;
if(l==r)return;
int mid=(l+r)/2;
build(p*2,l,mid);
build(p*2+1,mid+1,r);
}
void change(int p,int x,int v)
{
if(t[p].l==t[p].r){t[p].dat=v;return;}
int mid=(t[p].l+t[p].r)/2;
if(x<=mid)change(p*2,x,v);
else change(p*2+1,x,v);
t[p].dat=t[p*2].dat+t[p*2+1].dat;
}
int ask(int p,int l,int r)
{
if(l<=t[p].l&&r>=t[p].r)return t[p].dat;
int mid=(t[p].l+t[p].r)/2;
int val=0;
if(l<=mid)val+=ask(p*2,l,r);
if(r>mid)val+=ask(p*2+1,l,r);
return val;
}
int main()
{
cin>>n>>m;
build(1,1,n);
while(m--)
{
char c;
int x,y;
cin>>c>>x>>y;
if(c=='x')change(1,x,y);
else cout<<ask(1,x,y)<<endl;
}
return 0;
}