Submission #1350794

#TimeUsernameProblemLanguageResultExecution timeMemory
1350794jumpXORanges (eJOI19_xoranges)C++20
0 / 100
220 ms7292 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 = sum(b)^sum(a-1);
			if(b-2>=a+1)v^=sum(b-2)*sum(a+1);
			std::cout << v << '\n';
		}
	}
}
#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...