记录编号 164541 评测结果 AAAAAAAAAA
题目名称 zwei 最终得分 100
用户昵称 Gravatarassassain 是否通过 通过
代码语言 C++ 运行时间 0.370 s
提交时间 2015-06-02 08:58:34 内存使用 1.14 MiB
显示代码纯文本
#include<cstdio>
using namespace std;
int m,n;int c[111000],a[110000];
void gai(int,int);
int lowbit(int);
int  he(int);
int main()
{    freopen("zwei.in","r",stdin);
	 freopen("zwei.out","w",stdout);
	int x,y,z;
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;++i)
	  {
			scanf("%d",&a[i]);
			gai(i,a[i]);
	  }
	for(int i=1;i<=m;++i)
      {
			scanf("%d%d%d",&x,&y,&z);
			if(x==1)
				{
					y=he(y-1);
					z=he(z);
					printf("%d\n",y^z);
				}
			else
			   {
					gai(y,z^a[y]);
					a[y]=z;
			   }
      }
	//while(1);
}
void gai(int j,int k)
{
	while(j<=n)
      {
		 c[j]^=k;
		 j+=lowbit(j);
      }
}
int  he(int x)
{   int sum=0;
	while(x>0)
      {
		 sum^=c[x];//printf("%d^=(c[%d]=%d)\n",sum,x,c[x]);
		 x-=lowbit(x);
      }
	return sum;
}
int lowbit(int x)
{
	return x&(-x);
}