该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。
    
    题目描述
给定 n 个非负整数 a1,a2,…,an。有 q 次询问,每次询问:
- 给定一个非负整数 k,你需要从 2a1,…,2an 中取出一部分(即一个子集,可以为空),使得它们的和 ≥k。
 
- 在保证和 ≥k 的前提下,你需要最小化它们的和。你只需求出这个最小化的和。
 
- k 以二进制的形式给出,具体地,以 k=∑i=1m2pi 的形式给出,保证 pi 均为非负整数且严格单调递减,即 pi>pi+1。
 
由于答案可能很大,你只需要输出对 998244353 取模后的结果。
若无法从 2a1,…,2an 中取出一部分使得它们的和 ≥k,该询问输出 −1。
输入格式
第一行两个正整数 n,q。
第二行 n 个非负整数 a1,a2,…,an。
接下来 q 行,每行第一个非负整数为 m,接下来 m 个非负整数为 p1,p2,…,pm,表示询问的 k=∑i=1m2pi。保证 pi 严格单调递减,即 pi>pi+1。
输出格式
共 q 行,每行一个整数,表示答案对 998244353 取模后的结果,或输出 −1 表示无解。
样例
3 3
0 0 1
0
2 1 0
1 3
0
3
-1
样例解释 1
每个 2ai 分别为 1,1,2。三次询问的 k 为:0,3,8。具体如下:
- k=0:取空。
 
- k=3:取 1,2 即可。
 
- k=8:无解。
 
样例输入 2
见下发文件中的 down.in。
样例输出 2
见下发文件中的 down.ans。
样例解释 2
此样例满足子任务 1 的限制。
数据范围
本题使用子任务捆绑测试。
对于 100% 的数据,1≤n,q≤106,0≤m≤106,∑m≤5×106,0≤ai,pi≤106,pi>pi+1。
表格留空表示无额外限制。
| 子任务编号 | 
n≤ | 
q≤ | 
∑m≤ | 
ai,pi≤ | 
特殊性质 | 
分值 | 
| 1 | 
20 | 
 | 
60 | 
 | 
10 | 
| 2 | 
120 | 
10 | 
| 3 | 
5×103 | 
2.5×104 | 
5×103 | 
20 | 
| 4 | 
105 | 
5×105 | 
105 | 
20 | 
| 5 | 
 | 
m≤2 | 
10 | 
| 6 | 
ai 互不相同 | 
10 | 
| 7 | 
106 | 
5×106 | 
106 | 
 | 
20 | 
由于本题输入量较大,我们在下发文件中提供了 fast_read.cpp 可以选择使用(注意在 C++98 标准下可能无法编译通过)。
保证时间限制达到了没有使用特殊的读入优化的 std 的两倍。
注:因梦熊 OJ 暂未实现该功能,下发文件请通过 蓝奏云 获得。