이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <algorithm>
#include <iostream>
#include <iomanip>
#include <numeric>
#include <cassert>
#include <vector>
#include <random>
#include <cmath>
#include <queue>
#include <set>
#include <map>
#define syosu(x) fixed<<setprecision(x)
using namespace std;
typedef long long ll;
typedef unsigned int uint;
typedef unsigned long long ull;
typedef pair<int,int> P;
typedef pair<double,double> pdd;
typedef pair<ll,ll> pll;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef vector<double> vd;
typedef vector<vd> vvd;
typedef vector<ll> vl;
typedef vector<vl> vvl;
typedef vector<string> vs;
typedef vector<P> vp;
typedef vector<vp> vvp;
typedef vector<pll> vpll;
typedef pair<int,P> pip;
typedef vector<pip> vip;
const int inf=1<<30;
const ll INF=1ll<<60;
const double pi=acos(-1);
const double eps=1e-8;
const ll mod=1e9+7;
const int dx[4]={-1,0,1,0},dy[4]={0,-1,0,1};
vi vin(int n,int d=0){
	vi a(n);
	for(auto &i:a){
		cin>>i;
		i-=d;
	}
	return a;
}
vl vln(int n,int d=0){
	vl a(n);
	for(auto &i:a){
		cin>>i;
		i-=d;
	}
	return a;
}
vvi gin(int n,int m,int d=1){
	vvi g(n);
	for(int i=0;i<m;i++){
		int u,v;
		cin>>u>>v;
		u-=d,v-=d;
		g[u].push_back(v);
		g[v].push_back(u);
	}
	return g;
}
void vout(vi a){
	int n=a.size();
	cout<<n<<" :";
	for(auto i:a) cout<<' '<<i;
	cout<<endl;
}
class Segment_Tree{
	private:
	int n;
	vi date;
	public:
	void Init(int n_){
		n=1;
		while(n<n_) n*=2;
		date=vi(2*n-1);
	}
	void Update(int k,int x){
		k+=n-1;
		date[k]=x;
		while(k>0){
			k=(k-1)/2;
			date[k]=date[k*2+1]^date[k*2+2];
		}
	}
	int Query(int a,int b){
		a+=n-1;b+=n-1;
		int m=0;
		while(a<b){
			if(a%2==0) m^=date[a++];
			if(b%2==0) m^=date[--b];
			a/=2;b/=2;
		}
		return m;
	}
	int Open(int k){return date[k+n-1];}
};
int n,q;
int main(){
	cin>>n>>q;
	vi a=vin(n);
	Segment_Tree st[2];
	st[0].Init(n);
	st[1].Init(n);
	for(int i=0;i<n;i++) st[i%2].Update(i/2,a[i]);
	for(int i=0;i<q;i++){
		int t,l,r;
		cin>>t>>l>>r;
		if(t==1){
			l--;
			a[l]=r;
			st[l%2].Update(l/2,a[l]);
		}
		else{
			l--;
			if((r-l)%2==0) cout<<0<<endl;
			else cout<<st[l%2].Query(l/2,l/2+(r-l+1)/2)<<endl;
		}
	}
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |