#670. 最大或 1 数

最大或 1 数

题目描述

给定一个包含 nn 个非负整数的数组。

你需要回答 qq 个互相独立的情形。第 ii 个情形中,允许你最多执行 bib_i 次如下操作:

  • 选择数组的任意一个元素,将其加 11

你的目标是使整个数组按位或(bitwise OR)后的结果中二进制位为 11 的个数最大化。对于每个情形,求能得到的最大 11 的位数。

输入格式

输入包含多个测试用例。第一行一个整数 tt1t1031\le t\le 10^3)——测试用例个数。随后描述各测试用例。

每个测试用例格式如下:

  • 第一行包含两个整数 nnqq1n,q1051\le n,q\le 10^5)——数组大小与情形数。
  • 第二行包含 nn 个整数 a1,a2,,ana_1,a_2,\dots,a_n0ai1090\le a_i\le 10^9)——数组元素。
  • 接下来的 qq 行,每行包含一个整数 bib_i0bi1090\le b_i\le 10^9)——第 ii 个情形允许的最多操作次数。

保证所有测试用例中 n105\sum n\le 10^5q105\sum q\le 10^5

输出格式

对于每个测试用例,输出 qq 行,第 ii 行为在第 ii 个情形中能得到的最多的二进制 11 位数。

样例输入

3
1 3
0
0
2
4
2 2
1 3
0
3
2 1
1000000000 1000000000
1000000000

样例输出

0
1
2
2
3
31

说明

样例 1 解释

  • 第一个情形:不能做操作,原数组 OR 为 00,有 0011 位。
  • 第二个情形:允许 22 次操作,把 a1a_111 两次得 22,二进制 1010,有 1111 位,是最优。
  • 第三个情形:允许 33 次操作,把 a1a_111 三次得 33,二进制 1111,有 2211 位,是最优。

样例 2 解释

  • 第一个情形:不做操作,原数组 OR 为 1  3=31\ |\ 3 = 3,有 2211 位。
  • 第二个情形:允许 33 次操作,可以对 a2a_211 三次使 OR 的 11 位数达到 33