제출 #1188720

#제출 시각아이디문제언어결과실행 시간메모리
1188720mkkkkkkkkXORanges (eJOI19_xoranges)C++20
0 / 100
264 ms12224 KiB
#include <bits/stdc++.h> using namespace std; vector<long long> vec; pair<long long,long long> tree[200000*4]; void build(long long node,long long l,long long r) { if(l==r) { if(l%2==0) tree[node].first=vec[l]; else tree[node].second=vec[l]; } else { long long m=(l+r)/2; build(node*2+1,l,m); build(node*2+2,m+1,r); tree[node].first=tree[node*2+1].first^tree[node*2+2].first; tree[node].second=tree[node*2+1].second^tree[node*2+2].second; } } void qu(long long node,long long i,long long x,long long l,long long r) { if(l==r) { vec[l]=x; if(l%2==0) tree[node].first=vec[l]; else tree[node].second=vec[l]; } else { long long m=(l+r)/2; if(i<=m) qu(node*2+1,i,x,l,m); else qu(node*2+2,i,x,m+1,r); tree[node].first=tree[node*2+1].first^tree[node*2+2].first; tree[node].second=tree[node*2+1].second^tree[node*2+2].second; } } long long ask(long long node,long long l,long long r,long long L,long long R) { if(l>=L && r<=R) { if(L%2==0) return tree[node].first; else return tree[node].second; } else if(l>R || r<L) { return 0; } else { if(L%2==0) return tree[node*2+1].first^tree[node*2+2].first; else return tree[node*2+1].second^tree[node*2+2].second; } } int main() { long long n,q; cin>>n>>q; for(long long n1=n;n1>0;n1--) { long long x; cin>>x; vec.push_back(x); } build(0,0,vec.size()-1); for(;q>0;q--) { long long t; cin>>t; if(t==1) { long long i,x; cin>>i>>x; qu(0,i-1,x,0,vec.size()-1); } else { long long l,r; cin>>l>>r; cout<<ask(0,0,vec.size()-1,l-1,r-1)<<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...