题目描述
有一个长度为 N 的整数数列 A=(A1,A2,…,AN)。初始时,A 中的所有元素都是 0。
给定 Q 个查询,需要按顺序处理。查询共有两种类型,分别以以下格式给出:
1 x:将 Ax 的值增加 1。
2:对每个 i=1,2,…,N,如果 Ai≥1,则将 Ai 的值减少 1。
请在处理完每个查询后,立即求出 A1,A2,…,AN 的按位 XOR。
什么是按位 XOR?
非负整数 A 与 B 的按位 XOR 记作 A⊕B,定义如下:
- 在 A⊕B 的二进制表示中,2k(k≥0)位上的数字为 1,当且仅当 A 与 B 的二进制表示中 2k 位上的数字恰好有一个为 1;否则为 0。
例如,3⊕5=6(二进制:011⊕101=110)。
更一般地,k 个非负整数 p1,p2,p3,…,pk 的按位 XOR 定义为 $(\dots ((p_1 \oplus p_2) \oplus p_3) \oplus \dots \oplus p_k)$,且可以证明该值与 p1,p2,p3,…,pk 的顺序无关。
约束
- 1≤N≤5×105
- 1≤Q≤5×105
- 1≤x≤N
- 所有输入值均为整数。
输入
输入按以下格式从标准输入给出:
- N Q
- query1
- query2
- ⋮
- queryQ
每个查询为以下 2 种格式之一:
输出
输出 Q 行。
第 i 行 (1≤i≤Q) 输出处理完第 i 个查询后 A1,A2,…,AN 的按位 XOR。
2 5
1 2
1 2
1 1
2
2
1
2
3
1
0
处理完第 1 个查询后,A=(0,1)。0,1 的按位 XOR 为 1,因此第 1 行输出 1。
处理完第 2 个查询后,A=(0,2)。0,2 的按位 XOR 为 2,因此第 2 行输出 2。
处理完第 3 个查询后,A=(1,2)。1,2 的按位 XOR 为 3,因此第 3 行输出 3。
处理完第 4 个查询后,A=(0,1)。0,1 的按位 XOR 为 1,因此第 4 行输出 1。
处理完第 5 个查询后,A=(0,0)。0,0 的按位 XOR 为 0,因此第 5 行输出 0。
3 8
1 2
1 3
1 1
1 2
1 1
2
1 3
1 1
1
0
1
2
1
0
1
2
子任务设置
- 子任务 1(90 分):N,Q≤2000。
- 子任务 2(210 分):无特殊限制。