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