#HK5213. 「UOI 2024 Stage 4 Day1」AND 数组

「UOI 2024 Stage 4 Day1」AND 数组

题目描述

题目译自 Ukrainian Olympiads in Informatics 2024 Stage 4 Day1 T4. AND Масив

我们定义 f(s,p)f(s, p) (1sn,0p<b)(1 \le s \le n, 0 \le 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) 表示 2p2^pAND 表示按位与操作,OR 表示按位或操作。

按位与操作对于非负整数 aabb 的结果是一个非负整数,其二进制表示中某一位为 1,当且仅当 aabb 的二进制表示在该位上均为 1。例如,3103_{10} AND 510=001125_{10} = 0011_{2} AND 01012=00012=1100101_{2} = 0001_{2} = 1_{10}

按位或操作对于非负整数 aabb 的结果是一个非负整数,其二进制表示中某一位为 0,当且仅当 aabb 的二进制表示在该位上均为 0。例如,3103_{10} OR 510=001125_{10} = 0011_{2} OR 01012=01112=7100101_{2} = 0111_{2} = 7_{10}

对于每个 ii(从 11nn),计算:

f(i,0)+f(i,1)++f(i,b1)f(i,0) + f(i,1) + \ldots + f(i, b-1)

输入格式

输入的第一行包含两个整数 nnbb (1n105,1b20)(1 \leq n \leq 10^5, 1 \leq b \leq 20),分别表示数组 aa 的长度和数组元素的上限。

第二行包含 nn 个整数 a1,a2,,ana_1, a_2, \ldots, a_n (0ai<2b)(0 \leq a_i < 2^b),表示数组 aa 的元素。

输出格式

输出 nn 个整数,表示所求的值。

5 3
0 2 1 3 4

23 20 16 14 10

在第一个样例中,f(1,0)=1+2+5=8f(1,0)=1+2+5=8f(1,1)=1+3+5=9f(1,1)=1+3+5=9f(1,2)=1+2+3=6f(1,2)=1+2+3=6,因此第一个所求值为 8+9+6=238+9+6=23

3 2
1 3 2

4 3 3

数据范围与提示

详细子任务附加限制及分值如下表所示:

子任务 分值 附加限制
11 1010 n2000n \leq 2000
22 1010 ai=2ka_i = 2^k,其中 kk 为整数
33 1515 b8b \leq 8
44 1515 b12b \leq 12
55 2525 b16b \leq 16
66 2525 无附加限制