luogu#P6617. 查找 Search

查找 Search

题目背景

也许,同学间最好的结局就是朋友吧。

μry\mu ry 是一个可爱的女孩子。

在她所住的小区里有排成一排的 nn 个垃圾桶,从左至右第 ii 个垃圾桶里都装着编号为 aia_i 的垃圾。

μry\mu ry 不喜欢无序,于是就想把社区里编号和为 ww 的垃圾都清在一起。

但是调皮的 LeverImmy\text{LeverImmy} 可能会把某个垃圾桶里的垃圾偷换成另一种。

生气的 μry\mu ry 想考考 LeverImmy\text{LeverImmy} 一个区间 [l,r][l, r] 内是否存在编号和为 ww 的垃圾。

LeverImmy\text{LeverImmy} 也不会解决这个问题,于是他找到了聪明的你。

题目描述

给定 nn 个垃圾桶,你需要维护一个数据结构,支持以下操作:

  • 1 pos val 表示将 第 pospos 个垃圾桶里的垃圾的编号换成 valval

  • 2 l r 询问在 [lcnt,rcnt][l\oplus cnt, r\oplus cnt] 内是否存在垃圾编号和为 ww两个 垃圾桶。

其中 \oplus 表示异或运算,cntcnt 表示在 此次询问之前,答案为 Yes 的个数。

对于每个操作 2,若存在请输出 Yes,不存在请输出 No

值得注意的是,对于所有询问, ww同一个数

输入格式

第一行共三个整数 n,m,wn, m, w,表示序列长度、接下来的操作个数与 ww

第二行共 nn 个整数 a1,a2,,ana_1, a_2, \cdots, a_n 描述了这个每个垃圾桶内垃圾的编号 aa

接下来的 mm 行,每行三个整数,格式为 opt x y

输出格式

令操作 2 的次数为 tt,输出数据共 tt 行。

ii 行表示第 ii 个操作 2 的结果,即 YesNo

6 4 6
1 3 2 5 5 6
2 1 4
1 4 1
2 0 5
2 3 7
Yes
No
Yes
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
Yes
No
No
No
Yes
Yes

提示

本题采用 捆绑测试,开启 O2优化

Subtask 1 (7 pts):\text{Subtask 1 (7 pts)}: 保证 1n,m,w21031 \le n, m, w \le 2\cdot10^3时限 1s1\text{s}

Subtask 2 (20 pts):\text{Subtask 2 (20 pts)}: 保证 1n,m,w11051 \le n, m, w \le 1\cdot10^5opt=2opt = 2时限 2s2\text{s}

Subtask 3 (30 pts):\text{Subtask 3 (30 pts)}: 保证 1n,m,w11051 \le n, m, w \le 1\cdot10^5时限 2s2\text{s}

Subtask 4 (43 pts):\text{Subtask 4 (43 pts)}: 没有特殊限制,时限 4s4\text{s}

对于所有数据, 1n,m,w51051 \le n, m, w \le 5\cdot10^50aiw0 \le a_i \le w

数据保证对于每个操作,1posn1 \le pos \le n0valw0 \le val \le w1lrn1 \le l \le r \le n

由于输入输出量较大,建议使用更快的输入输出方式。


输入 #1 解释

第一次操作,询问区间 [1,4][1, 4] 中是否有两个数加起来为 66,显然有a1+a4=6a_1 + a_4 = 6,因此输出 Yes

第二次操作,修改 a4a_411,则序列变为 [1,3,2,1,5,6][1, 3, 2, 1, 5, 6]

第三次操作,询问区间 [1,4][1, 4] 中是否有 两个 数加起来为 66,无,因此输出 No

第四次操作,询问区间 [2,6][2, 6] 中是否有两个数加起来为 66,显然有 a4+a5=6a_4 + a_5 = 6,因此输出 Yes