记录编号 74915 评测结果 AAAAAAAAAA
题目名称 zwei 最终得分 100
用户昵称 Gravatardigital-T 是否通过 通过
代码语言 C++ 运行时间 1.330 s
提交时间 2013-10-26 18:14:47 内存使用 4.51 MiB
显示代码纯文本
#include<fstream>
using namespace std;
ifstream fi("zwei.in");
ofstream fo("zwei.out");
class Tree
{
public:
	int l,r,Lchild,Rchild,S;
}tree[200010];
int n,m,tot,d[100001];
void maketree(int root,int l,int r)
{
	tree[root].l=l;
	tree[root].r=r;
	if(l!=r)
	{
		int mid=(l+r)/2;
		tree[root].Lchild=++tot;
		maketree(tot,l,mid);
		tree[root].Rchild=++tot;
		maketree(tot,mid+1,r);
		tree[root].S=tree[tree[root].Lchild].S^tree[tree[root].Rchild].S;
		return;
	}
	
	tree[root].Lchild=tree[root].Rchild=-1;
	tree[root].S=d[l];
}
void Changing(int root,int x,int y)
{
	if(tree[root].l>x||tree[root].r<x)return;//不包含x的区间排除
	if(tree[root].Lchild==-1)//找到了x
	{
		d[x]=y;
		tree[root].S=y;
		return;
	}
	Changing(tree[root].Lchild,x,y);
	Changing(tree[root].Rchild,x,y);
	tree[root].S=tree[tree[root].Lchild].S^tree[tree[root].Rchild].S;
}
int Printing(int root,int x,int y)//保证x,y在区间[l,r]中
{
	if(tree[root].r<x||y<tree[root].l)return 0;//不包含x的区间排除
	if(x<=tree[root].l&&tree[root].r<=y)return tree[root].S;//完全覆盖区间
	return Printing(tree[root].Lchild,x,y)^Printing(tree[root].Rchild,x,y);
}
int main()
{
	int i;
	fi>>n>>m;
	for(i=1;i<=n;i++)fi>>d[i];
	tot=0;
	maketree(0,1,n);
	int cmp,x,y;
	for(i=1;i<=m;i++)
	{
		fi>>cmp>>x>>y;
		if(cmp==0)Changing(0,x,y);
		else fo<<Printing(0,x,y)<<endl;
	}
	return 0;
}