题目描述
题目译自 Ukrainian Olympiads in Informatics 2024 Stage 4 Day1 T4. AND Масив
我们定义 f(s,p) (1≤s≤n,0≤p<b) 为以下伪代码执行的结果:
res = 0
x = power(2, p)
for i = s to n:
if ((x AND a[i]) == 0):
x = (x OR a[i])
res = res + i
返回 res
其中,power(2, p) 表示 2p,AND 表示按位与操作,OR 表示按位或操作。
按位与操作对于非负整数 a 和 b 的结果是一个非负整数,其二进制表示中某一位为 1,当且仅当 a 和 b 的二进制表示在该位上均为 1。例如,310 AND 510=00112 AND 01012=00012=110。
按位或操作对于非负整数 a 和 b 的结果是一个非负整数,其二进制表示中某一位为 0,当且仅当 a 和 b 的二进制表示在该位上均为 0。例如,310 OR 510=00112 OR 01012=01112=710。
对于每个 i(从 1 到 n),计算:
f(i,0)+f(i,1)+…+f(i,b−1)
输入格式
输入的第一行包含两个整数 n 和 b (1≤n≤105,1≤b≤20),分别表示数组 a 的长度和数组元素的上限。
第二行包含 n 个整数 a1,a2,…,an (0≤ai<2b),表示数组 a 的元素。
输出格式
输出 n 个整数,表示所求的值。
5 3
0 2 1 3 4
23 20 16 14 10
在第一个样例中,f(1,0)=1+2+5=8,f(1,1)=1+3+5=9,f(1,2)=1+2+3=6,因此第一个所求值为 8+9+6=23。
3 2
1 3 2
4 3 3
数据范围与提示
详细子任务附加限制及分值如下表所示:
| 子任务 |
分值 |
附加限制 |
| 1 |
10 |
n≤2000 |
| 2 |
10 |
ai=2k,其中 k 为整数 |
| 3 |
15 |
b≤8 |
| 4 |
15 |
b≤12 |
| 5 |
25 |
b≤16 |
| 6 |
25 |
无附加限制 |