P10743 [SEERC 2020] AND = OR

题目描述

一个数组 $b$ 被称为“好的数组”当且仅当可以将 $b$ 划分为两个非空的子数组,这两个子数组中第一个子数组的 $\mathtt{OR}$ 结果与第二个子数组的 $\mathtt{AND}$ 结果相等,例如 $\{1,7,3,11\}$,将其划分为 $\{1,3\}$ 与 $\{7,11\}$,$1\ \mathtt{OR}\ 3 = 3$,$7\ \mathtt{AND}\ 11 = 3$,所以它是一个好的数组。 现在给定一个长度为 $n$ 的数组 $a$,$q$ 组询问,每次给定 $[l,r]$,问 $\{a_l, a_{l+1},\ldots,a_{r-1},a_{r}\}$ 是不是一个好的数组。

输入格式

第一行两个整数 $n\ (1 \leq n \leq 10^5)$ 和 $q\ (1 \leq q \leq 10^5)$。 然后一行 $n$ 个整数表示序列 $a\ (0\leq a_i \leq 2^{30}-1)$。 接下来 $q$ 行,一行两个整数 $l,r\ (1 \leq l \leq r \leq n)$,表示一组询问。

输出格式

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