AT_pakencamp_2023_day3_b AND

题目描述

对于长度为 $n\geq 2$ 的非负整数列 $a=(a_1,a_2,\ldots,a_n)$,定义 $f(a)$ 如下: - 如果可以通过如下操作将 $a$ 的所有元素变为 $0$,则 $f(a)$ 为达到这一目标所需操作次数的最小值,否则 $f(a)=-1$。 - 选择满足 $1\leq i\leq n,1\leq j\leq n,|i-j|=1$ 的整数对 $i,j$,将 $a_i$ 替换为 $a_i \operatorname{AND} a_j$。 给定长度为 $N$ 的非负整数列 $A=(A_1,A_2,\ldots,A_N)$,你需要处理 $Q$ 个询问。 对于第 $i$ 个询问,给定整数 $L_i,R_i$,请你求 $f((A_{L_i},A_{L_i+1},\ldots,A_{R_i}))$ 的值。 AND 的定义如下:对于非负整数 $x,y$,按位与 $x\operatorname{AND}y$ 被定义为:若 $x$、$y$ 的二进制表示下 $2^k$ 位都为 $1$,则结果的 $2^k$ 位为 $1$,否则为 $0$。 例如,$5\operatorname{AND}12=4$。(二进制下 $101\operatorname{AND}1100=100$。)

输入格式

输入按以下格式从标准输入给出: > $N$ > $A_1\ A_2\ \ldots\ A_N$ > $Q$ > $L_1\ R_1$ > $L_2\ R_2$ > $\vdots$ > $L_Q\ R_Q$

输出格式

对于每个查询,输出对应的结果,每行输出一个答案。

说明/提示

### 样例解释 1 对于第 $1$ 个查询,设 $a=(5,6,11)$,输出 $f(a)$ 的值。通过操作如下: $a=(5,6,11)\rightarrow(5,4,11)\rightarrow(5,0,11)\rightarrow(5,0,0)\rightarrow(0,0,0)$ 可以在 $4$ 步内将所有元素变为 $0$。可以证明不存在比 $4$ 步更少的方案,因此 $f(a)=4$。 对于第 $2$ 个查询,$a=(6,11)$。可以证明无论怎样操作,都无法将所有元素变为 $0$,因此 $f(a)=-1$。 ### 数据范围 - $2\leq N\leq 2\times 10^5$ - $0\leq A_i