#P10743. [SEERC2020] AND = OR

[SEERC2020] AND = OR

题目描述

一个数组 bb 被称为“好的数组”当且仅当可以将 bb 划分为两个非空的子数组,这两个子数组中第一个子数组的 OR\mathtt{OR} 结果与第二个子数组的 AND\mathtt{AND} 结果相等,例如 {1,7,3,11}\{1,7,3,11\},将其划分为 {1,3}\{1,3\}{7,11}\{7,11\}1 OR 3=31\ \mathtt{OR}\ 3 = 37 AND 11=37\ \mathtt{AND}\ 11 = 3,所以它是一个好的数组。

现在给定一个长度为 nn 的数组 aaqq 组询问,每次给定 [l,r][l,r],为 {al,al+1,,ar1,ar}\{a_l, a_{l+1},\ldots,a_{r-1},a_{r}\} 是不是一个好的数组。

输入格式

第一行两个整数 n (1n105)n\ (1 \leq n \leq 10^5)q (1q105)q\ (1 \leq q \leq 10^5)

然后一行 nn 个整数表示序列 a (0ai2301)a\ (0\leq a_i \leq 2^{30}-1)

接下来 qq 行,一行两个整数 l,r (1lrn)l,r\ (1 \leq l \leq r \leq n),表示一组询问。

输出格式

对于每个询问,如果该子数组是好的输出 YES,否则输出 NO

5 15
0 1 1 3 2
1 1
1 2
1 3
1 4
1 5
2 2
2 3
2 4
2 5
3 3
3 4
3 5
4 4
4 5
5 5
NO
NO
YES
YES
YES
NO
YES
YES
YES
NO
NO
YES
NO
NO
NO