Submission #1043664

#TimeUsernameProblemLanguageResultExecution timeMemory
1043664biserailievaXORanges (eJOI19_xoranges)C++14
100 / 100
366 ms13140 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; int seg1[600009]; int seg2[600009]; int v[600009]; void build(int id, int l, int r) { if(l==r) { if(l%2==1) { return; } seg1[id]=v[l]; return; } int mid=(l+r)/2; build(id*2, l, mid); build(id*2+1, mid+1, r); seg1[id]=seg1[id*2]^seg1[id*2+1]; } void update(int l, int r, int u, int v, int k) { if(l==r && l==v) { seg1[u]=k; return; } if(v<l || v>r) { return; } int mid=(l+r)/2; update(l, mid, u*2, v, k); update(mid+1, r, u*2+1, v, k); seg1[u]=seg1[u*2]^seg1[u*2+1]; } int query(int id, int l, int r, int a, int b, int res) { if(a<=l && b>=r) { return seg1[id]^res; } if(l>b || r<a) { return res; } int mid=(l+r)/2; res=query(id*2, l, mid, a, b, res); res=query(id*2+1, mid+1, r, a, b, res); return res; } void build2(int id, int l, int r) { if(l==r) { if(l%2==0) { return; } seg2[id]=v[l]; return; } int mid=(l+r)/2; build2(id*2, l, mid); build2(id*2+1, mid+1, r); seg2[id]=seg2[id*2]^seg2[id*2+1]; } void update2(int l, int r, int u, int v, int k) { if(l==r && l==v) { seg2[u]=k; return; } if(v<l || v>r) { return; } ll mid=(l+r)/2; update2(l, mid, u*2, v, k); update2(mid+1, r, u*2+1, v, k); seg2[u]=seg2[u*2]^seg2[u*2+1]; } int query2(int id, int l, int r, int a, int b, int res) { if(a<=l && b>=r) { return seg2[id]^res; } if(l>b || r<a) { return res; } ll mid=(l+r)/2; res=query2(id*2, l, mid, a, b, res); res=query2(id*2+1, mid+1, r, a, b, res); return res; } int main() { int n, q; cin>>n>>q; for(int i=0;i<n;i++) { cin>>v[i]; } build(1, 0, n-1); build2(1, 0, n-1); while(q--) { int x, l, r; cin>>x>>l>>r; if(x==1) { l--; if(l%2==0) { update(0, n-1, 1, l, r); } else { update2(0, n-1, 1, l, r); } } else { l--; r--; if((r-l)%2==1) { cout<<0<<endl; } else { if(l%2==0) { cout<<query(1, 0, n-1, l, r, 0)<<endl; } else { cout<<query2(1, 0, n-1, l, r, 0)<<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...