题目背景
小可和小达正在玩一个有趣的猜数字游戏。小可有一个数组 a,小达会猜一段区间内所有数的**按位与(AND)**结果,即 al & al+1 & … & ar。
题目描述
给定长度为 n 的数组 a,支持两种操作:
1 l r x:询问能否通过至多选择区间 [l,r] 中的一个位置,将其修改为任意满足 0≤v<230 的整数(可以不修改),使得 al & al+1 & … & ar 的结果恰好等于 x。若能则输出 YES,否则输出 NO。该修改是假设性的,仅用于本次询问,不会改变真实的数组。
2 i y:将 a[i] 的值修改为 y(0≤y<230)。
输入格式
第一行一个整数 n。
第二行 n 个整数 a1,a2,…,an。
第三行一个整数 q。
接下来 q 行,每行一个操作。
输出格式
对于每个类型 1 的操作,输出一行 YES 或 NO。
样例
样例输入
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]
- 查询
1 1 3 1:[7,3,5] 的 AND 为 7 & 3 & 5=1,已等于 x=1,无需修改 → YES
- 查询
1 3 6 4:[5,1,8,4] 的 AND 为 0,需要得到 4(二进制 100)。位 2(值为 4)在 5(101) 和 1(001) 中为 0,有两个元素不满足,无法通过修改一个元素使得结果为 4 → NO
- 修改
2 3 7:a[3]=7,a=[7,3,7,1,8,4]
- 查询
1 1 3 1:[7,3,7] 的 AND 为 3=1。但将区间内任意一个元素修改为值 1,即可得到目标结果 → YES
- 查询
1 2 5 0:[3,7,1,8] 的 AND 为 0,已等于 x=0 → YES
- 修改
2 4 2:a[4]=2,a=[7,3,7,2,8,4]
- 查询
1 3 6 4:[7,2,8,4] 的 AND 为 0。位 2(值为 4)在 2(010) 和 8(1000) 中为 0,有两个元素不满足 → NO
数据范围
| 测试点 |
n |
q |
| 1∼8 |
n≤100 |
q≤100 |
| 9∼18 |
n≤2×105 |
q≤2×105 |
| 19∼20 |
特殊边界 |
— |
对于所有数据:1≤n,q≤2×105,0≤ai,y,x<230。