Submission #290376

#TimeUsernameProblemLanguageResultExecution timeMemory
290376dolijanXORanges (eJOI19_xoranges)C++14
100 / 100
632 ms10504 KiB
#include <bits/stdc++.h>
typedef long long ll;
#define pb push_back;
using namespace std;
const int sz=530069;
int parni[sz];
int neparni[sz];
void updateparni(int pos,int val)
{
	parni[pos]=val;
	pos/=2;
	while(pos>=1)
	{
		parni[pos]=parni[2*pos]^parni[2*pos+1];
		pos/=2;
	}
}
void updateneparni(int pos,int val)
{
	neparni[pos]=val;
	pos/=2;
	while(pos>=1)
	{
		neparni[pos]=neparni[2*pos]^neparni[2*pos+1];
		pos/=2;
	}
}
int queryparni(int l,int r,int L,int R,int node)
{
	if(R<l || r<L) return 0;
	if(l<=L && R<=r) return parni[node];
	int mid=(L+R)/2;
	int levo=queryparni(l,r,L,mid,2*node);
	int desno=queryparni(l,r,mid+1,R,2*node+1);
	return levo^desno;
}
int queryneparni(int l,int r,int L,int R,int node)
{
	if(R<l || r<L) return 0;
	if(l<=L && R<=r) return neparni[node];
	int mid=(L+R)/2;
	int levo=queryneparni(l,r,L,mid,2*node);
	int desno=queryneparni(l,r,mid+1,R,2*node+1);
	return levo^desno;
}
int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int n,q;
	cin>>n>>q;
	int a[n+1];
	for(int i=1;i<=n;i++) cin>>a[i];
	int k=1;
	while(k<n) k*=2;
	for(int i=1;i<=n;i++)
	{
		if(i%2==1) updateneparni(i-1+k,a[i]);
		else updateparni(i-1+k,a[i]);
	}
	while(q--)
	{
		int type,aa,bb;
		cin>>type>>aa>>bb;
		if(type==1) 
		{
			a[aa]=bb;
			if(aa%2==1) updateneparni(aa-1+k,bb);
			else updateparni(aa-1+k,bb);
		}
		else
		{
			if(aa%2!=bb%2) cout<<0<<endl;
			else
			{
				if(aa%2==0) cout<<queryparni(aa-1,bb-1,0,k-1,1)<<endl;
				else cout<<queryneparni(aa-1,bb-1,0,k-1,1)<<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...