Problem2921--【Div1】硬币与付款(超级困难版)

2921: 【Div1】硬币与付款(超级困难版)

[Creator : ]
Time Limit : 1.000 sec  Memory Limit : 128 MB

Description

本题与 2920 的描述完全一致,不同的是数据范围


注意:本题有Q次查询
你手上有n种面值的硬币,不同硬币的面值之间可能不相等也可能相等,还有一个特点就是不论面值是多少,但都是2的某个非负次方,例如:1、2、4、8、1024、4096等
现在,你需要支付m元钱,你准备从你拥有的n枚硬币选一些来支付,你希望使用的硬币数量越少越好,请输出这个最小的数量,如果你完全无法支付这个m元钱,请打印-1


一共有Q次询问,每次询问都是独立的,即每一次的支付不会影响原有硬币的数量。


数据范围:
1<= n,m, Q <=1 000 000

第一行两个整数,分别是n和Q,第二行n个整数,表示这n枚硬币的面值。
接下来Q行,每行一个整数m,代表要支付的金额


输出:你需要输出Q个整数,每个整数单独一行,表示对文涛于每次询问,回答最少用多少枚硬币可以支付,如果不存在支付方案,打印-1

Sample Input Copy

5 4
2 4 8 2 4
8
5
14
10

Sample Output Copy

1
-1
3
2

Source/Category