Branch of Faith
题号:NC312182
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

\hspace{15pt}小红有一棵包含 n 个节点的完全二叉树^\texttt{[1]},其中 1 号节点为根,i 号节点的左儿子编号是 2\times i,右儿子编号是 2\times i + 1
\hspace{15pt}现在有 q 次询问,每次查询一个 x,你需要回答与 x 号节点深度^\texttt{[3]}相同的节点有多少个(包含 x 本身)。

【名词解释】
\hspace{15pt}完全二叉树^\texttt{[1]}:满足以下全部条件的二叉树^\texttt{[2]}
\hspace{23pt}\bullet\,若树的层数为 h,则除第 h 层外,其他各层(1h-1 层)的节点数均达到最大值(即第 i \left(1 \leqq i \lt h \right) 层节点数为 2^{i-1});
\hspace{23pt}\bullet\,h 层的所有节点都连续集中在左侧,即节点之间不存在任何空位。
\hspace{15pt}二叉树^\texttt{[2]}:满足以下全部条件的树。
\hspace{23pt}\bullet\,二叉树可以是空集;若不为空,则由一个根节点以及两棵互不相交的、分别称为左子树和右子树的二叉树组成;
\hspace{23pt}\bullet\,每个节点要么没有父节点连接(此时该节点被称为根节点)、要么被 1 个父节点连接(此时该节点被称为父节点的子节点);
\hspace{23pt}\bullet\,每个节点连接的子节点数量要么为 0 (此时该节点被称为叶子节点),要么不超过 2,且此时每个子节点都有明确的“左”或“右”属性。
\hspace{15pt}深度^\texttt{[3]}:从根节点到节点 u 的唯一路径上的边数,称为节点 u 的深度。根节点的深度为 0

输入描述:

\hspace{15pt}每个测试文件均包含多组测试数据。第一行输入一个整数 T\left(1\leqq T\leqq 10^4\right) 代表数据组数,每组测试数据描述如下:

\hspace{15pt}第一行输入两个整数 n, q \left(1 \leqq n \leqq 10^{18};\, 1 \leqq q \leqq 2\times 10^5 \right),表示二叉树的节点数、询问次数。
\hspace{15pt}此后 q 行,第 i 行输入一个整数 x_i \left(1 \leqq x_i \leqq n \right),表示第 i 次询问的节点编号。

\hspace{15pt}除此之外,保证单个测试文件的 q 之和不超过 2 \times 10^5

输出描述:

\hspace{15pt}对于每一次询问,新起一行输出一个整数,代表与 x_i 号节点深度相同的节点数量。
示例1

输入

复制
2
6 6
1
2
3
4
5
6
1145 3
1000
4
66

输出

复制
1
2
2
3
3
3
512
4
64