Submission #1334203

#TimeUsernameProblemLanguageResultExecution timeMemory
1334203tsengangXORanges (eJOI19_xoranges)C++20
100 / 100
102 ms25120 KiB
#include <bits/stdc++.h>
#define ll long long
#define ff first
#define ss second
#define pb push_back
#define all(x) (x).begin(), (x).end()
#define ertunt return
using namespace std;
ll mod = 10007;
vector<ll> adj[600007];
vector<ll>vis(200005);
vector<ll> f(600005), inv(600005);
ll modpow(ll a, ll b){
    ll r = 1;
    while(b){
        if(b & 1){
            r *= a;
            r %= mod;
        }
        a *= a;
        a %= mod;
        b >>= 1;
    }
    ertunt r;
}
ll nCk(ll n, ll k){
    if(k < 0 || k > n) ertunt 0;
    ertunt f[n] * inv[k] % mod * inv[n - k] % mod;
}
struct segtree{
	vector<ll>d;
	ll n;
	segtree(ll _n){
		d.resize(4*_n,0);
		n = _n;
	}
	void update(ll v,ll l,ll r,ll val,ll pos){
		if(pos < l or pos > r)return;
		if(l == r){
			d[v] = val;
			return;
		}
		ll m = (l+r)>>1;
		update(v*2,l,m,val,pos);
		update(v*2+1,m+1,r,val,pos);
		d[v] = d[v*2]^d[v*2+1];
	}
	ll query(ll v,ll l,ll r,ll L, ll R){
		if(R < l or L > r)ertunt 0;
		if(L <= l and r <= R) ertunt d[v];
		ll m = (l+r)>>1;
		return query(v*2,l,m,L,R)^query(v*2+1,m+1,r,L,R);
	}
	ll query(ll L,ll R){
		return query(1,1,n,L,R);
	}
	void update(ll val, ll pos){
		update(1,1,n,val,pos);
	}
};
int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    ll n,q;
	cin >> n >> q;
	segtree gang(n),dang(n);
	for(ll i = 1; i <= n; i++){
		ll x;
		cin >> x;
		if(i%2)gang.update(x,i);
		else dang.update(x,i);
	}
	while(q--){
		ll t;
		cin >> t;
		if(t == 1){
			ll i,j;
			cin >> i >> j;
			if(i%2)gang.update(j,i);
			else dang.update(j,i);
		}
		else{
			ll l,r;
			cin >> l >> r;
			if((l-r+1)%2 == 0)cout << 0 << '\n';
			else{
				if(l%2)cout << gang.query(l,r) << '\n';
				else cout << dang.query(l,r) << '\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...