查找 Search

题目背景

> 也许,同学间最好的结局就是朋友吧。 $\mu ry$ 是一个可爱的女孩子。 在她所住的小区里有排成一排的 $n$ 个垃圾桶,从左至右第 $i$ 个垃圾桶里都装着编号为 $a_i$ 的垃圾。 $\mu ry$ 不喜欢无序,于是就想把社区里编号和为 $w$ 的垃圾都清在一起。 但是调皮的 $\text{LeverImmy}$ 可能会把某个垃圾桶里的垃圾偷换成另一种。 生气的 $\mu ry$ 想考考 $\text{LeverImmy}$ 一个区间 $[l, r]$ 内是否存在编号和为 $w$ 的垃圾。 但 $\text{LeverImmy}$ 也不会解决这个问题,于是他找到了聪明的你。

题目描述

给定 $n$ 个垃圾桶,你需要维护一个数据结构,支持以下操作: - `1 pos val` 表示将 第 $pos$ 个垃圾桶里的垃圾的编号换成 $val$; - `2 l r` 询问在 $[l\oplus cnt, r\oplus cnt]$ 内是否存在垃圾编号和为 $w$ 的 **两个** 垃圾桶。 其中 $\oplus$ 表示异或运算,$cnt$ 表示在 **此次询问之前**,答案为 `Yes` 的个数。 对于每个操作 2,若存在请输出 `Yes`,不存在请输出 `No`。 值得注意的是,对于所有询问, $w$ 为 **同一个数**。

输入输出格式

输入格式


第一行共三个整数 $n, m, w$,表示序列长度、接下来的操作个数与 $w$。 第二行共 $n$ 个整数 $a_1, a_2, \cdots, a_n$ 描述了这个每个垃圾桶内垃圾的编号 $a$。 接下来的 $m$ 行,每行三个整数,格式为 `opt x y`。

输出格式


令操作 2 的次数为 $t$,输出数据共 $t$ 行。 第 $i$ 行表示第 $i$ 个操作 2 的结果,即 `Yes` 或 `No`。

输入输出样例

输入样例 #1

6 4 6
1 3 2 5 5 6
2 1 4
1 4 1
2 0 5
2 3 7

输出样例 #1

Yes
No
Yes

输入样例 #2

10 20 10
9 3 6 3 3 3 3 1 4 9
1 3 9
1 6 9
2 3 10
1 3 9
2 4 4
1 1 7
1 1 3
1 5 6
1 3 9
2 4 7
1 2 7
2 6 8
1 6 10
2 2 9
1 7 9
2 3 1
1 3 5
1 5 6
1 9 10
1 3 6

输出样例 #2

Yes
No
No
No
Yes
Yes

说明

本题采用 **捆绑测试**,开启 **O2优化**。 $\text{Subtask 1 (7 pts)}:$ 保证 $1 \le n, m, w \le 2\cdot10^3$,**时限 $1\text{s}$**; $\text{Subtask 2 (20 pts)}:$ 保证 $1 \le n, m, w \le 1\cdot10^5$,$opt = 2$,**时限 $2\text{s}$**; $\text{Subtask 3 (30 pts)}:$ 保证 $1 \le n, m, w \le 1\cdot10^5$,**时限 $2\text{s}$**; $\text{Subtask 4 (43 pts)}:$ 没有特殊限制,**时限 $4\text{s}$**; 对于所有数据, $1 \le n, m, w \le 5\cdot10^5$,$0 \le a_i \le w$。 数据保证对于每个操作,$1 \le pos \le n$,$0 \le val \le w$,$1 \le l \le r \le n$。 由于输入输出量较大,建议使用更快的输入输出方式。 --- #### 输入 #1 解释 第一次操作,询问区间 $[1, 4]$ 中是否有两个数加起来为 $6$,显然有$a_1 + a_4 = 6$,因此输出 `Yes`; 第二次操作,修改 $a_4$ 为 $1$,则序列变为 $[1, 3, 2, 1, 5, 6]$; 第三次操作,询问区间 $[1, 4]$ 中是否有 **两个** 数加起来为 $6$,无,因此输出 `No`。 第四次操作,询问区间 $[2, 6]$ 中是否有两个数加起来为 $6$,显然有 $a_4 + a_5 = 6$,因此输出 `Yes`。