记录编号 166215 评测结果 AAAAAAAAAA
题目名称 zwei 最终得分 100
用户昵称 Gravatar啊吧啦吧啦吧 是否通过 通过
代码语言 C 运行时间 0.276 s
提交时间 2015-06-14 16:08:25 内存使用 1.05 MiB
显示代码纯文本
#include<stdio.h>
#define MAXN 100001

int n, m, c[MAXN] = {0}, lobit(int), ask(int), qread(), num[MAXN];
void update(int, int), print(int, int), init();

main()
{
	freopen("zwei.in", "r", stdin);
	freopen("zwei.out", "w", stdout);
	init();
	fclose(stdin);
	fclose(stdout);
	return 0;
}

int lobit(int x)
{
	return x & (-x);
}

void update(int i, int x)
{
	while(i <= MAXN)
	{
		c[i] = c[i] ^ x;
		i += lobit(i);
	}
}

void print(int l, int r)
{
	printf("%d\n", ask(r) ^ ask(l - 1));
}

void init()
{
	int i, a, b;
	char ch;
	n = qread();
	m = qread();
	for(i = 1; i <= n; i ++)
	{
		num[i] = qread();
		update(i, num[i]);
	}
	for(; m --;)
	{
		do
			ch = getchar();
		while(ch != '0' && ch != '1');
		a = qread();
		b = qread();
		if(ch == '0')
		{
			update(a, num[a]);
			update(a, b);
			num[a] = b;
		}
		else if(ch == '1')
			print(a, b);
	}
}

int ask(int x)
{
	int ans = 0, i;
	for(i = x; i > 0; i -= lobit(i))
		ans = ans ^ c[i];
	return ans;
}

int qread()
{
	int ans = 0;
	char ch;
	do
		ch = getchar();
	while(ch < '0' || ch > '9');
	do
	{
		ans = ans * 10 + ch - '0';
		ch = getchar();
	}
	while(ch >= '0' && ch <= '9');
	return ans;
}