记录编号 96218 评测结果 AAAAAAAAAA
题目名称 zwei 最终得分 100
用户昵称 GravatarDijkstra 是否通过 通过
代码语言 C++ 运行时间 0.979 s
提交时间 2014-04-11 17:08:25 内存使用 3.75 MiB
显示代码纯文本
#include<fstream>
using namespace std;
ifstream fin("zwei.in");
ofstream fout("zwei.out");
int t[800000]={0},L,m,x,y,n[100001]={0},mark,s=0;
void BUILD(int l,int r,int p)
{
	int m=(l+r)/2;
	if(l==r)
	{
		t[p]=n[l];
		return;
	}
	BUILD(l,m,2*p);
	BUILD(m+1,r,2*p+1);
	t[p]=t[2*p]^t[2*p+1];
}
void SET(int l,int r,int p)
{
	int m=(l+r)/2;
	if(l==r&&l==x)
	{
		t[p]=y;
		return;
	}
	if(x<=m) SET(l,m,2*p);
	if(x>m) SET(m+1,r,2*p+1);
	t[p]=t[2*p]^t[2*p+1];
}
void OXR(int l,int r,int p)
{
	int m=(l+r)/2;
	if(l>=x&&r<=y)
	{
		s=s^t[p];
		return;
	}
	if(x<=m) OXR(l,m,2*p);
	if(y>m) OXR(m+1,r,2*p+1);
}	
int main()
{
    fin>>L>>m;
	int i;
	for(i=1;i<=L;i++)fin>>n[i];
	BUILD(1,L,1);
	for(i=1;i<=m;i++)
	{
		fin>>mark>>x>>y;
		if(!mark) SET(1,L,1);
		if(mark)
		{
			s=0;
			OXR(1,L,1);
			fout<<s<<endl;
		}
	}
	return 0;
}