Submission #601086

#TimeUsernameProblemLanguageResultExecution timeMemory
601086FidanXORanges (eJOI19_xoranges)C++17
100 / 100
638 ms22100 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; const ll N=(2e5)+10; vector<ll> T1(4*N, 0); vector<ll> T2(4*N, 0); void upd(ll l, ll r, ll id, ll val, ll v, vector<ll> &T){ if(l==id && r==l){ T[v]=val; return; } ll mid=(l+r)/2; if(id<=mid) upd(l, mid, id, val, 2*v, T); else upd(mid+1, r, id, val, 2*v+1, T); T[v]=(T[2*v]^T[2*v+1]); } ll que(ll l, ll r, ll tl, ll tr, ll v, vector<ll> &T){ if(l>r) return 0; if(l==tl && r==tr) return T[v]; ll tm=(tl+tr)/2; return (que(l, min(tm, r), tl, tm, 2*v, T)^que(max(tm+1, l), r, tm+1, tr, 2*v+1, T)); } int main(){ ll n, q, i; cin>>n>>q; vector<ll> a(n+1, 0); vector<ll> b(n+1, 0); for(i=1; i<=n; i++){ ll x; cin>>x; if(i%2==0){ a[i]=x; upd(1, n, i, x, 1, T1); } else{ b[i]=x; upd(1, n, i, x, 1, T2); } } while(q--){ int t; cin>>t; if(t==1){ ll j, val; cin>>j>>val; if(j%2==0) upd(1, n, j, val, 1, T1); else upd(1, n, j, val, 1, T2); } else{ ll l, r; cin>>l>>r; if((r-l)%2==1) cout<<0<<endl; else{ if(l%2==0) cout<<que(l, r, 1, n, 1, T1)<<endl; else cout<<que(l, r, 1, n, 1, T2)<<endl; } } } return 0; }
#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...