"""
https://www.lanqiao.cn/problems/3691/learning/?page=1&first_category_id=1&problem_id=3691
"""
from itertools import accumulate
import sys
input = sys.stdin.readline
print = sys.stdout.write
n, q = map(int, input().split())
a = list(map(int, input().split()))
a_bit = []
# 每一位单独考虑, 求a数组每个数字第i位有(1)还是没有(0)
for i in range(31):
now_bit = []
for x in a:
now_bit.append((x >> i) & 1)
# 前缀和
a_bit.append(list(accumulate(now_bit)))
for _ in range(q):
l, r = map(int, input().split())
l -= 1
r -= 1
ans = 0
for i in range(31):
if l == 0:
now = a_bit[i][r]
else:
now = a_bit[i][r] - a_bit[i][l - 1]
if now > 0:
ans += (1 << i)
print(str(ans) + '\n')
蓝桥杯-区间或
最新推荐文章于 2024-07-18 20:05:25 发布
本文介绍了一道编程题目,涉及如何使用Python的itertools库和位操作计算给定整数数组中每个数字每位的出现次数,以及在指定范围内的二进制位数量。通过前缀和实现查询特定位的值。
摘要由CSDN通过智能技术生成