萌新线段树板子求调,全WA
查看原帖
萌新线段树板子求调,全WA
764957
AnEasySong楼主2023/5/17 17:07

样例已过,已开long long

#include <bits/stdc++.h>
using namespace std;
#define ll long long
const ll N=1e6+1;

ll n,w;
ll a[N];

struct node
{
	ll l,r;
	ll dat;
	#define l(p) tree[p].l
	#define r(p) tree[p].r
}tree[4*N];

ll ls(ll p) {return p<<1;}
ll rs(ll p) {return p<<1|1;}

void build(ll p,ll l,ll r)
{
	l(p)=l;
	r(p)=r;
	if(l==r)
	{
		tree[p].dat=0;
		return;
	}
	ll mid=(l+r)>>1;
	build(ls(p),l,mid);
	build(rs(p),mid+1,r);
	tree[p].dat=tree[ls(p)].dat+tree[rs(p)].dat;
}

void change(ll p,ll x,ll v)
{
	if(l(p)==r(p))
	{
		tree[p].dat=v;
		return;
	}
	ll mid=(l(p)+r(p))>>1;
	if(x<=mid) change(ls(p),x,v);
	else change(rs(p),x,v);
	tree[p].dat=tree[ls(p)].dat+tree[rs(p)].dat;
}

ll ask(ll p,ll l,ll r)
{
	if(l<=l(p)&&r(p)<=r) return tree[p].dat;
	ll val=0;
	ll mid=(l(p)+r(p))>>1;
	if(l<=mid) val+=ask(ls(p),l,r);
	if(r>mid) val+=ask(rs(p),l,r);
	return val;
}

int main()
{
	cin>>n;
	cin>>w;
	getchar();
	build(1,1,n);
	while(w--)
	{
		char op;
		ll x,y;
		cin>>op>>x>>y;
		switch(op)
		{
			case 'x':
			{
				change(1,x,y);
				break;
			}
			case 'y':
			{
				cout<<ask(1,x,y)<<endl;
				break;
			}
		}
	}
	return 0;
}
2023/5/17 17:07
加载中...