이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define endl "\n"
#define all(aa) aa.begin(), aa.end()
vector<int> arr;
vector<vector<int>> st;
int build(int n, int s, int e, int t){
if(s==e) return st[t][n]=(s%2==t ? arr[s]:0);
int mid=(s+e)/2;
return st[t][n]=build(n*2, s, mid, t)^build(n*2+1, mid+1, e, t);
}
int query(int n, int s, int e, int l, int r, int t){
if(s>=l && e<=r) return st[t][n];
if(s>r || e<l) return 0;
int mid=(s+e)/2;
return query(n*2, s, mid, l, r, t)^query(n*2+1, mid+1, e, l, r, t);
}
int update(int n, int s, int e, int i, int v, int t){
if(s>i || e<i) return st[t][n];
if(s==e) return st[t][n]=v;
int mid=(s+e)/2;
return st[t][n]=update(n*2, s, mid, i, v, t)^update(n*2+1, mid+1, e, i, v, t);
}
int main(){
int n, q;
cin>>n>>q;
arr.resize(n+1); st.resize(2, vector<int>(6*n));
for(int i=1; i<=n; i++) cin>>arr[i];
build(1, 1, n, 0); build(1, 1, n, 1);
while(q--){
int t, a, b;
cin>>t>>a>>b;
if(t==1) update(1, 1, n, a, b, a%2);
else if((b-a)%2) cout<<0<<endl;
else cout<<query(1, 1, n, a, b, a%2)<<endl;
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |