제출 #877840

#제출 시각아이디문제언어결과실행 시간메모리
877840slumioXORanges (eJOI19_xoranges)C++17
100 / 100
472 ms9776 KiB
#include<bits/stdc++.h> using namespace std; using ll=long long; using ull=unsigned long long; void add(vector<int>&tree,int &n,int k,int &num) { k+=n; tree[k]=num; for(k/=2;k>=1;k/=2) { tree[k]=tree[2*k]^tree[2*k+1]; } return; } int sump(vector<int>&tree,int &n,int a,int b) { a+=n; b+=n; int num=0; while(a<=b) { if(a%2==1)num^=tree[a++]; if(b%2==0)num^=tree[b--]; a/=2;b/=2; } return num; } void solve(){ int n;cin>>n; int q;cin>>q; vector<int>tree1; vector<int>tree2; tree1.assign(2*n+5,0); tree2.assign(2*n+5,0); for(int i=0;i<n;i++) { int m;cin>>m; if(i%2==0) { add(tree1,n,i,m); } else{ add(tree2,n,i,m); } } for(int i=0;i<q;i++) { int type; cin>>type; if(type==1) { int pos,val; cin>>pos>>val; pos--; if(pos%2==0) { add(tree1,n,pos,val); } else{ add(tree2,n,pos,val); } } else{ int l,r;cin>>l>>r; l--;r--; if((r-l+1)%2==0)cout<<0<<endl; else{ if(l%2==0) { cout<<sump(tree1,n,l,r)<<endl; } else{ cout<<sump(tree2,n,l,r)<<endl; } } } } return; } int main() { solve(); 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...