题库练习 Inc, Dec, Xor
← 上一题 下一题 →

A7709 | Inc, Dec, Xor

时间限制2s
内存限制1024MB
通过 / 提交0/0

题目描述

有一个长度为 $N$ 的整数序列

$$ A=(A_1,A_2,\ldots,A_N). $$

初始时,$A$ 中的所有元素均为 $0$。

接下来给出 $Q$ 次操作,你需要按照给出的顺序依次执行。

操作共有以下两种:

- 1 x:将 $A_x$ 的值增加 $1$。
- 2:对于所有 $i=1,2,\ldots,N$,如果 $A_i\ge1$,则将 $A_i$ 的值减少 $1$。

每次操作执行结束后,求

$$ A_1\oplus A_2\oplus\cdots\oplus A_N $$

的值,其中 $\oplus$ 表示按位异或。

### 什么是按位异或?

对于两个非负整数 $A$ 和 $B$,其按位异或记作 $A\oplus B$。

在二进制表示中,对于每一个二进制位:

- 如果 $A$ 和 $B$ 在这一位中恰好有一个是 $1$,那么 $A\oplus B$ 的这一位为 $1$;
- 否则这一位为 $0$。

例如:

$$ 3\oplus5=6 $$

因为二进制下:

```text
011 XOR 101 = 110
```

更一般地,对于 $k$ 个非负整数 $p_1,p_2,\ldots,p_k$,它们的按位异或定义为

$$ (\cdots((p_1\oplus p_2)\oplus p_3)\oplus\cdots\oplus p_k). $$

可以证明,该结果与这些数进行异或的顺序无关。

输入格式

输入格式如下:

```text
N Q
query1
query2

queryQ
```

每个询问为以下两种格式之一:

```text
1 x
```

或者

```text
2
```

输出格式

输出 $Q$ 行。

第 $i$ 行($1\le i\le Q$)输出执行完第 $i$ 次操作后:

$$ A_1\oplus A_2\oplus\cdots\oplus A_N $$

的值。

输入输出样例

输入 #1
2 5
1 2
1 2
1 1
2
2
输出 #1
1
2
3
1
0
输入 #2
3 8
1 2
1 3
1 1
1 2
1 1
2
1 3
1 1
输出 #2
1
0
1
2
1
0
1
2
C++ 编辑器
输入
输出