比赛 |
20131026 |
评测结果 |
AAAAAAAAAA |
题目名称 |
zwei |
最终得分 |
100 |
用户昵称 |
mikumikumi |
运行时间 |
0.829 s |
代码语言 |
C++ |
内存使用 |
4.51 MiB |
提交时间 |
2015-09-12 22:58:33 |
显示代码纯文本
#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
using namespace std;
int n,m;
int P[100010],tot=1;
class miku
{
public:
int sum;
int r,l;
int lson,rson;
}T[200010];
void build(int l,int r)
{
int mid=(l+r)/2,root=tot;
if(l==r)
{
T[root].l=T[root].r=l;
T[root].lson=T[root].rson=-1;
T[root].sum=P[l];
}
else
{
T[root].lson=++tot;build(l,mid);
T[root].rson=++tot;build(mid+1,r);
T[root].l=l;T[root].r=r;T[root].sum=T[T[root].lson].sum^T[T[root].rson].sum;
}
return;
}
void change(int root,int x,int y)
{
if(x<T[root].l||x>T[root].r) return;
if(T[root].r==T[root].l)
{
T[root].sum=y;
return;
}
change(T[root].lson,x,y);
change(T[root].rson,x,y);
T[root].sum=T[T[root].lson].sum^T[T[root].rson].sum;
}
int get(int root,int l,int r)
{
if(r<T[root].l||l>T[root].r) return 0;
if(l<=T[root].l&&r>=T[root].r) return T[root].sum;
else
{
int tot=0;
tot^=get(T[root].lson,l,r);
tot^=get(T[root].rson,l,r);
return tot;
}
}
int main()
{
freopen("zwei.in","r",stdin);
freopen("zwei.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
scanf("%d",&P[i]);
build(1,n);
int a,x,y,l,r;
for(int i=1;i<=m;i++)
{
scanf("%d",&a);
if(a==0)
{
scanf("%d%d",&x,&y);
//cout<<x<<" "<<y<<endl;
change(1,x,y);
}
if(a==1)
{
scanf("%d%d",&l,&r);
printf("%d\n",get(1,l,r));
}
}
return 0;
}