CF1878 E. Iva & Pav

https://codeforces.com/contest/1878/problem/E

题意

\(给定一个长度为n的数组,有q次询问,每次询问给出两个整数l和r,找到最大的r使得a_l \ \& \ a_{l+1} \ \& \dots \& \ a_r \ \ge \ k,\)
\(如果不存在r则输出-1\)

思路

思考这个问题之前我们先来想一下怎么处理区间按位与:
\( 我们定义一个二维数组pre,pre[i][j]表示前1~i为数字中(1 << j) 的出现次数。当我们求[l, r]区间内的按位与时,\)
\(我们只需要查询有多少位j在[l, r]中出现刚好r - l + 1次即可 \)
\( 我们还考虑到:越多数字按位与则按位与的结果是会越小的,我们可以利用这个单调性来二分查找r的值 \)

posted @ 2024-02-29 19:58  jvdyvan  阅读(12)  评论(0)    收藏  举报