题目描述
对于一个用恰好 N 位二进制表示的正整数 x,定义操作 trim(x):删除其二进制表示左侧和右侧连续的 0,但保留中间的 0。
例如,当 N=6 时:
- x=4=0001002,则 trim(4)=12;
- x=10=0010102,则 trim(10)=1012=5。
现在考虑所有整数 1,2,…,2N−1,它们均用恰好 N 位二进制表示。对每个数执行 trim 操作后,将得到的数按如下规则排序:
- 先按二进制表示中 1 的个数从小到大排序;
- 若 1 的个数相同,则按 trim 后的数值从小到大排序。
最后,将排序后的所有数的二进制表示依次拼接成一个长二进制串,位置从左到右编号为 1。
给定 N 以及 T 个询问位置 p1,p2,…,pT,请回答拼接串中这些位置上的比特值。
输入格式
第一行包含两个整数 N,T。
第二行包含 T 个整数:
p1,p2,…,pT.
输出格式
输出一个长度为 T 的 01 串,不含空格。第 i 个字符表示位置 pi 上的比特。
数据范围
- 1≤N≤100;
- 2≤T≤100000;
- 1≤pi≤1018;
- 保证所有 pi 不超过最终拼接串的长度。
子任务
| 子任务 |
分值 |
限制 |
| 1 |
7 |
N=5 且 pi≤109 |
| 2 |
N≤20 且 pi≤109 |
| 3 |
26 |
N≤60 且 pi≤109 |
| 4 |
17 |
pi≤105 |
| 5 |
26 |
pi≤5×1010 |
| 6 |
17 |
无额外限制 |
样例
样例 1
3 10
7 1 2 3 4 5 6 8 9 10
1111111101
当 N=3 时,初始数为 1 到 7。执行 trim 并排序后得到:
1_2, 1_2, 1_2, 11_2, 11_2, 101_2, 111_2
拼接串为 1111111101111。
样例 2
5 10
1 2 3 4 15 23 19 45 66 99
1111011111