제출 #1188717

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