题意:
给定$a[n]$,有$q$组询问$l,r$
问是否存在$l=p_1<p_2<p_3…p_k=r$
也就是说$(l+1)-(r)$之间尽量是二进制的1多
$if (now \& a[i]>0)$
$now|=a[i]$
设$dp[i][j]$为$a[i]$的第j位最晚出现的位置
那么转移方程就是
$a[i]\& (1<<j)$
在查询的时候只需要知道 $a[l]$是否有一位在$(l+1)-(r)$出现过
即$dp[i][j]>=l$ 此时就一定$a[p_i] \& a[p_{i+1}]>0$
代码
1 |
|