This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
#define MAX 100000
using namespace std;
int t1[MAX],t2[MAX],n1,n2;
vector <int> k1,k2;
void update1 (int x ,int delta){
for ( ;x<=n1;x+=x&-x)t1[x]^=delta;
}
int sum1 (int x){
int sum=0;
for ( ;x>=1;x-=x&-x)sum^=t1[x];
return sum;
}
void update2 (int x ,int delta){
for ( ;x<=n2;x+=x&-x)t2[x]^=delta;
}
int sum2 (int x){
int sum=0;
for ( ;x>=1;x-=x&-x)sum^=t2[x];
return sum;
}
void update1_ (int x ,int delta){
int a=x;
for ( ;x<=n1;x+=x&-x)t1[x]^=delta^k1[a];
}
void update2_ (int x ,int delta){
int a=x;
for ( ;x<=n2;x+=x&-x)t2[x]^=delta^k2[a];
}
int main(){
int n,q;
cin>>n>>q;
k2.push_back(-1);
k1.push_back(-1);
for (int i=1;i<=n;i++){
int a;
cin>>a;
if (i%2==0)k2.push_back(a);else k1.push_back(a);
}
n1=k1.size()-1;
n2=k2.size()-1;
for (int i=1;i<=n1;i++)update1(i,k1[i]);
for (int i=1;i<=n2;i++)update2(i,k2[i]);
while (q--){
int a,b,c;
cin>>a>>b>>c;
if (a==1){
if (b%2==1){
b=b/2+1;
update1_(b,c);
k1[b]=c;
}
if (b%2==0){
b/=2;
update2_(b,c);
k2[b]=c;
}
continue;
}
if (a==2 && (c-b)%2==1){
cout<<0<<"\n";continue;
}
if (b%2==1){
b=b/2+1;
c=c/2+1;
int ans=sum1(c)^sum1(b-1);
cout<<ans<<"\n";
}else
if (b%2==0){
b/=2;
c/=2;
int ans=sum2(c)^sum2(b-1);
cout<<ans<<"\n";
}
}
}
# | 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... |