#include<bits/stdc++.h>
#define MAXN 1000007
using namespace std;
int n,q,a[MAXN],b[MAXN],t,x,y;
int ft1[MAXN],ft2[MAXN];
int ls(int x)
{
return ((x)&(-x));
}
void update1(int x,int val)
{
for(int i=x;i<=MAXN;i+=ls(i))
{
ft1[i]^=val;
}
}
void update2(int x,int val)
{
for(int i=x;i<=MAXN;i+=ls(i))
{
ft2[i]^=val;
}
}
int s1(int x)
{
int ans=0;
for(int i=x;i>0;i-=ls(i))
{
ans^=ft1[i];
}
return ans;
}
int s2(int x)
{
int ans=0;
for(int i=x;i>0;i-=ls(i))
{
ans^=ft2[i];
}
return ans;
}
int sum1(int l,int r)
{
return (s1(r)^s1(l-1));
}
int sum2(int l,int r)
{
return (s2(r)^s2(l-1));
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin>>n>>q;
for(int i=1;i<=n;i++)
{
if(i%2)
{
cin>>a[(i+1)/2];
update1((i+1)/2,a[(i+1)/2]);
}
else
{
cin>>b[i/2];
update2(i/2,b[i/2]);
}
}
for(int i=0;i<q;i++)
{
cin>>t>>x>>y;
if(t==2)
{
if((y-x+1)%2==0)
{
cout<<0<<"\n";
}
else
{
if(x%2)
{
cout<<sum1((x+1)/2,(y+1)/2)<<"\n";
}
else
{
cout<<sum2(x/2,y/2)<<"\n";
}
}
}
else
{
if(x%2)
{
update1((x+1)/2,(a[(x+1)/2]^y));
a[(x+1)/2]=y;
}
else
{
update2(x/2,(b[x/2]^y));
b[x/2]=y;
}
}
}
return 0;
}
# | 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... |