Submission #658214

#TimeUsernameProblemLanguageResultExecution timeMemory
658214DzadzoXORanges (eJOI19_xoranges)C++17
38 / 100
552 ms8156 KiB
#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 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...