Submission #1350809

#TimeUsernameProblemLanguageResultExecution timeMemory
1350809jumpXORanges (eJOI19_xoranges)C++20
0 / 100
1046 ms131072 KiB
#include <bits/stdc++.h>
#define int long long
//extremely overengineered solution
int fwk[200010];
int value[200010];
void updateIn(int idx,int v){
	while(idx<=200000)fwk[idx]^=v,idx+=idx&-idx;
}
void update(int idx,int v){
	updateIn(idx,value[idx]);
	updateIn(idx,v);
	value[idx]=v;
}
int sum(int idx){
	int sum=0;
	while(idx>0)sum^=fwk[idx],idx-=idx&-idx;
	return sum;
}
signed main() {
	int n,q;
	std::cin >> n >> q;
	for(int i=1;i<=n;i++){
		int in;
		std::cin >> in;
		update(i,in);
		// for(int i=0;i<=n;i++)std::cout << fwk[i] << ' ';
		// std::cout << '\n';
	}
	while(q--){
		for(int i=0;i<=n;i++)std::cout << sum(i) << ',' ;
		std::cout << '\n';
		int t,a,b;
		std::cin >> t >> a >> b;
		if(t==1){
			update(a,b);
		}
		else{
			int v = 0;
			int x1=0,x2=0,x3=0;
			if(b-a+1>=3)x1^=sum(b)^sum(a-1);
			if(b-a+1>=4)x1^=sum(b-1)^sum(a);
			if(b-a+1>=5)x1^=sum(b-2)^sum(a+1);
			
			if(b-a+1>=2)x2^=sum(b)^sum(a-1);
			if(b-a+1>=3)x2^=sum(b-1)^sum(a);

			if(b-a+1>=1)x3^=sum(b)^sum(a-1);
			v=x1^x2^x3;
			//std::cout << "(" << x1 << ' ' << x2 << ' ' << x3 << ' ' << v << ")\n";
			std::cout << v << '\n';
		}
	}
}
/*
5 6
1 2 3 4 5
2 1 3
1 1 3
2 1 5
2 4 4
1 1 1
2 4 4
*/
#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...