Submission #468592

#TimeUsernameProblemLanguageResultExecution timeMemory
468592_BodyXORanges (eJOI19_xoranges)C++14
100 / 100
673 ms25184 KiB
#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize("-Ofast")
#pragma GCC optimize("trapv")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,sse4.2,popcnt,abm,mmx,avx2,tune=native")
#pragma GCC optimize("-ffast-math")
#pragma GCC optimize("-funroll-loops")
 #define int long long
 int tree[(int)(2e5+1)*4],arr[(int)2e5+1];
 int n;
 void build(int l,int r,int v)
{
	if(l==r)
	{
		tree[v]=arr[l];
	}
	else
	{
		int mid=(l+r)/2;
		build(l,mid,v*2+1);
		build(mid+1,r,v*2+2);
		tree[v]=tree[v*2+1]^tree[v*2+2];
	}
}
 int get(int l,int r,int v,int lq,int rq)
{
	if(r<lq||l>rq)
		return 0;
	if(l>=lq&&r<=rq)
		return tree[v];
	int mid=(l+r)/2;
	return get(l,mid,v*2+1,lq,rq)^get(mid+1,r,v*2+2,lq,rq);
}
 void update(int l,int r,int idx,int val,int v)
{
	if(l==r)
	{
		tree[v]=val;
	}
	else
	{
		int mid=(l+r)/2;
		if(idx<=mid)
			update(l,mid,idx,val,v*2+1);
		else update(mid+1,r,idx,val,v*2+2);
		tree[v]=tree[v*2+1]^tree[v*2+2];
	}
}
int32_t main() {
	  ios_base::sync_with_stdio(0);
  cin.tie(0);
cin>>n;
 int q;
 cin>>q;

								    	 for(int i=0;i<n*4;i++)
                                            tree[i]=0;
								    	for(int i=0;i<n;i++)
								    		cin>>arr[i];
								    	int idx=0;
								    	map<int,int>map;

								    	int arr2[n];
								    	for(int i=0;i<n;i+=2){
								    	map[i]=idx;
								    		arr2[idx++]=arr[i];
								    	}
								    	for(int i=1;i<n;i+=2){
								    		map[i]=idx;
								    		arr2[idx++]=arr[i];
								    	}
								    	copy(arr2, arr2+n, arr);
								    	build(0,n-1,0);
								    	vector<int>ans;
								    	for(int i=0;i<q;i++)
								    	{
								    	    int t;
								    		cin>>t;
								    		if(t==1)
								    		{
								    			cin>>idx;
								    			idx--;
								    			 int val;
								    			 cin>>val;
								    			idx=map[idx];

								    			update(0,n-1,idx,val,0);
								    		}
								    		else
								    		{
								    		    int l,r;
								    		    cin>>l>>r;
								    		    l--,r--;
								    			if((r-l+1)%2==0)
								    			{
								    				ans.push_back(0);
								    				continue ;
								    			}
								    			l=map[l];
								    			r=map[r];
								    			ans.push_back(get(0,n-1,0,l,r));
								    		}
								    	}
								    	for(int i=0;i<ans.size();i++)
                                            cout<<ans[i]<<endl;
	return 0;
}

Compilation message (stderr)

xoranges.cpp: In function 'int32_t main()':
xoranges.cpp:104:27: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  104 |              for(int i=0;i<ans.size();i++)
      |                          ~^~~~~~~~~~~
#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...