제출 #966225

#제출 시각아이디문제언어결과실행 시간메모리
966225vjudge1XORanges (eJOI19_xoranges)C++17
100 / 100
437 ms14308 KiB
#include<bits/stdc++.h>
using namespace std;
long long n,q,a[1000001],b[1000001],c[1000001],tc[4000001],tl[4000001],db=1,dc=1;
void build(long long id,long long l,long long r)
{
	if(l==r)
	{
		if(l%2==0)
		{
			tc[id]=a[l];
			tl[id]=0;
		}
		else
		{
			tc[id]=0;
			tl[id]=a[l];
		}
		return ;
	}
	long long mid=(l+r)/2;
	build(id*2,l,mid);
	build(id*2+1,mid+1,r);
	tc[id]=tc[id*2]^tc[id*2+1];
	tl[id]=tl[id*2]^tl[id*2+1];
}
void update(long long id,long long l,long long r ,long long pos,long long w)
{
	if(l>pos||r<pos) return ;
	if(l==r)
	{
		if(l%2==1)
		{
//			tl[id]=a[pos];
			tl[id]=w;
			return ;
		}
		else
		{
//			tc[id]=a[pos];
			tc[id]=w;
			return ;
		}
	}
	long long mid=(l+r)/2;
	update(id*2,l,mid,pos,w);
	update(id*2+1,mid+1,r,pos,w);
	tc[id]=tc[id*2]^tc[id*2+1];
	tl[id]=tl[id*2]^tl[id*2+1];
}
long long getc(long long id,long long l,long long r,long long u,long long v)
{
	if(l>v||r<u) return 0;
	if(u<=l&&r<=v)
	{
		return tc[id];
	}
	long long mid=(l+r)/2;
	return getc(id*2,l,mid,u,v)^getc(id*2+1,mid+1,r,u,v);
}
long long getl(long long id,long long l,long long r,long long u,long long v)
{
	if(l>v||r<u) return 0;
	if(u<=l&&r<=v)
	{
//		cout<<l<<" "<<r<<endl;
		return tl[id];
	}
	long long mid=(l+r)/2;
	return getl(id*2,l,mid,u,v)^getl(id*2+1,mid+1,r,u,v);
}

int main()
{
	cin>>n>>q;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
	}
	build(1,1,n);
	while(q--)
	{
		long long tv;
		cin>>tv;
		if(tv==1)
		{
			long long pos,w;
			cin>>pos>>w;
			a[pos]=w;
			update(1,1,n,pos,w);
		}
		else
		{
			long long l,r;
			cin>>l>>r;
			if((r-l)%2==1)
			{
				cout<<0<<endl;
			}
			else
			{
				if(l%2==1)
				{
					cout<<getl(1,1,n,l,r)<<endl;
				}
				else cout<<getc(1,1,n,l,r)<<endl;
			}
		}
	}
	return 0;	
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...