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的值
\)