3818 - 按位与
描述

小 R 有 n 个非负整数 a_1, a_2, \cdots, a_n。

小 X 给了小 R 一个正整数 m,并要求小 R 从这 n 个非负整数中选出恰好 m 个,使得选出的 m 个数的二进制按位与的值最大。

你需要帮助小 R 求出,他能选出的 m 个数的按位与的最大值。

输入

输入的第一行包含两个正整数 n, m。

输入的第二行包含 n 个非负整数 a_1, a_2, \cdots, a_n,依次表示小 R 的 n 个非负整数。

输出

输出一行一个非负整数,表示小 R 能选出的 m 个数的按位与的最大值。

样例

输入

4 2
3 15 12 12

输出

12

输入

5 3
31 3 1 15 7

输出

7
提示

样例 1 解释:可选的四对分别是 3 \& 15 = 3、3 \& 12 = 0、15 \& 12 = 12、12 \& 12 = 12,最大值是 12。

样例 2 解释:选 31, 15, 7 时按位与为 31 \& 15 \& 7 = 7,可以证明这是最大的。

数据范围

• 1 \le m \le n \le 2 \times 10^5;

• 0 \le a_i < 2^{30}。

测试点构成(共 20 个测试点)

测试点特征
1 ~ 5n \le 20,a_i < 2^{20},可以暴力枚举子集
6, 7n = 2000,分别是 m = 1 和 m = n,用来卡特殊写法
8 ~ 10n = 2000,m = 2
11, 12n = 2 \times 10^5,m = n - 1(只丢掉一个数)
13n = 2 \times 10^5,所有 a_i 形如 2^k - 1
14, 15n = 2^{17},a_i = i - 1(即 0, 1, 2, \cdots, n-1)
16, 17n = 2 \times 10^5,a_i < 4
18, 19n = 2 \times 10^5,a_i < 2^{10}
20n = 2 \times 10^5,a_i < 2^{30}

提示

先想一个判定问题:「能不能让答案的二进制里包含某个掩码 M 的所有位?」这等价于「至少存在 m 个数 x 满足 (x \& M) = M」,也就是统计这样的数有多少个,若不少于 m 就说明 M 里的位可以同时为 1。

于是从高位到低位逐位确定:已经确定的答案记为 ans,试着把第 b 位置成 1,令 M = ans \,|\, 2^b,统计 (a_i \& M) = M 的个数;若不少于 m 就保留这一位。因为高位的权重大于所有低位之和,按位贪心是正确的。

复杂度 O(30n),30 \times 2 \times 10^5 = 6 \times 10^6,很快。

来源
2026 CCF CSP-J/S 第二轮 入门组
标签
题目参数
时间限制 1 秒
内存限制 1024 MB
提交次数 7
通过次数 4