记录编号 |
166215 |
评测结果 |
AAAAAAAAAA |
题目名称 |
zwei |
最终得分 |
100 |
用户昵称 |
啊吧啦吧啦吧 |
是否通过 |
通过 |
代码语言 |
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;
}