#P1107. 猜AND游戏

猜AND游戏

题目背景

小可和小达正在玩一个有趣的猜数字游戏。小可有一个数组 aa,小达会猜一段区间内所有数的**按位与(AND)**结果,即 al & al+1 &  & ara_l \ \&\ a_{l+1} \ \&\ \dots \ \&\ a_r

题目描述

给定长度为 nn 的数组 aa,支持两种操作:

  1. 1 l r x:询问能否通过至多选择区间 [l,r][l,r] 中的一个位置,将其修改为任意满足 0v<2300 \le v < 2^{30} 的整数(可以不修改),使得 al & al+1 &  & ara_l \ \&\ a_{l+1} \ \&\ \dots \ \&\ a_r 的结果恰好等于 xx。若能则输出 YES,否则输出 NO该修改是假设性的,仅用于本次询问,不会改变真实的数组。
  2. 2 i y:将 a[i]a[i] 的值修改为 yy0y<2300 \le y < 2^{30})。

输入格式

第一行一个整数 nn

第二行 nn 个整数 a1,a2,,ana_1, a_2, \dots, a_n

第三行一个整数 qq

接下来 qq 行,每行一个操作。

输出格式

对于每个类型 11 的操作,输出一行 YESNO

样例

样例输入

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

样例输出

YES
NO
YES
YES
NO

样例解释

初始 a=[7,3,5,1,8,4]a = [7,3,5,1,8,4]

  1. 查询 1 1 3 1[7,3,5][7,3,5] 的 AND 为 7 & 3 & 5=17\ \&\ 3\ \&\ 5 = 1,已等于 x=1x=1,无需修改 → YES
  2. 查询 1 3 6 4[5,1,8,4][5,1,8,4] 的 AND 为 00,需要得到 44(二进制 100100)。位 22(值为 44)在 5(101)5(101)1(001)1(001) 中为 00,有两个元素不满足,无法通过修改一个元素使得结果为 44NO
  3. 修改 2 3 7a[3]=7a[3] = 7a=[7,3,7,1,8,4]a = [7,3,7,1,8,4]
  4. 查询 1 1 3 1[7,3,7][7,3,7] 的 AND 为 313 \ne 1。但将区间内任意一个元素修改为值 11,即可得到目标结果 → YES
  5. 查询 1 2 5 0[3,7,1,8][3,7,1,8] 的 AND 为 00,已等于 x=0x=0YES
  6. 修改 2 4 2a[4]=2a[4] = 2a=[7,3,7,2,8,4]a = [7,3,7,2,8,4]
  7. 查询 1 3 6 4[7,2,8,4][7,2,8,4] 的 AND 为 00。位 22(值为 44)在 2(010)2(010)8(1000)8(1000) 中为 00,有两个元素不满足 → NO

数据范围

测试点 nn qq
181 \sim 8 n100n \le 100 q100q \le 100
9189 \sim 18 n2×105n \le 2 \times 10^5 q2×105q \le 2 \times 10^5
192019 \sim 20 特殊边界

对于所有数据:1n,q2×1051 \le n, q \le 2 \times 10^50ai,y,x<2300 \le a_i, y, x < 2^{30}