线段树80分求调
查看原帖
线段树80分求调
350945
linlioo楼主2022/2/16 21:02
#include<bits/stdc++.h>
#define ll long long
using namespace std;
struct node
{
	ll sum,l,r,mid,add;
}a[400010];
void pushup(ll k)
{
	a[k].sum=a[k<<1].sum^a[k<<1|1].sum;
}
void csh(ll k,ll l,ll r)
{
	a[k].l=l;
	a[k].r=r;
	a[k].mid=l+r>>1;
	if(l==r)
	{
		return ;
	}
	csh(k<<1,l,a[k].mid);
	csh(k<<1|1,a[k].mid+1,r);
}
void xo(ll k,ll q)
{
	if(a[k].l==a[k].r)
	{
		a[k].sum^=1;
		return;
	}
	if(a[k].mid>=q)
	{
		xo(k<<1,q);
	}
	else
	{
		xo(k<<1|1,q);
	}
	pushup(k);
}
ll ans(ll k,ll q)
{
	if(a[k].l>=1&&a[k].r<=q)
	{
		return a[k].sum;
	}
	ll an=0;
	if(a[k].mid>=1)
	{
		an^=ans(k<<1,q);
	}
	if(a[k].mid<q)
	{
		an^=ans(k<<1|1,q);
	}
	return an;
}
int main()
{
	ll n,m;
	scanf("%lld%lld",&n,&m);
	csh(1,1,n);
	while(m--)
	{
		ll op;
		scanf("%lld",&op);
		if(op==1)
		{
			ll l,r;
			scanf("%lld%lld",&l,&r);
			xo(1,l);
			xo(1,r+1);
		}
		else
		{
			ll x;
			scanf("%lld",&x);
			printf("%lld\n",ans(1,x)^1);
		}
	}
}

感觉没有什么问题,但是就是出问题了。。。。。

2022/2/16 21:02
加载中...