1
# Runtime: 1961 ms (Top 83.96%) | Memory: 47.2 MB (Top 5.66%)3
MAX_BIT = MAX_N.bit_length()8
def __init__(self, nums: List[int]):10
self.bit_sum = [[0] * MAX_BIT for _ in range(n + 1)]11
for i in range(1, n + 1):12
for b in range(MAX_BIT):13
self.bit_sum[i][b] = self.bit_sum[i - 1][b] + ((nums[i - 1] >> b) & 1)14
self.num_idx = defaultdict(list)16
self.num_idx[nums[i]].append(i)18
def query(self, left: int, right: int, threshold: int) -> int:20
for b in range(MAX_BIT):21
if self.bit_sum[right + 1][b] - self.bit_sum[left][b] >= threshold:23
l = bisect.bisect_left(self.num_idx[num], left)24
r = bisect.bisect_right(self.num_idx[num], right)25
if r - l >= threshold: