loj#P553. 「LibreOJ Round #8」MINIM

「LibreOJ Round #8」MINIM

题目描述

取石子游戏的规则是这样的:有若干堆石子,两个玩家轮流操作,每个玩家每次要选一堆取走任意多个石子,但不能不取,无石子可取者输。

现在共有 nn 堆石子,其中第 ii 堆的数量为 lil_i,现在 LCR 需要在每一堆中扔掉一部分(可以不扔也可以全扔),如果第 ii 堆的石子在 LCR 操作后还有剩余,LCR 就需要付出 viv_i 的代价。LCR 操作完成后神犇会搬来新的一堆个数在 [0,m][0,m] 之间的石子,两人玩取石子游戏,LCR 先手。神犇搬运新的一堆石子时会保证自己(后手)必胜,如果他无法做到这一点,就会立即结束游戏。

现在 LCR 有 qq 次询问,每次给出一个 c[0,m]c\in [0,m],请你回答如果要让神犇搬来的石子数为 cc(不能让神犇结束游戏,即使这里要求 c=0c=0),LCR 付出代价的总和至少是多少。如果 LCR 不可能通过调整石子使得神犇搬来的石子数为 cc,输出 -1

输入格式

第一行两个正整数 n,mn,m

接下来 nn 行每行两个正整数 vi,liv_i,l_i 表示该堆石子的代价和数量。

接下来一行一个正整数 qq

接下来 qq 行每行一个正整数 cc 表示询问。

输出格式

输出共 qq 行,依次表示每次询问的答案,无解输出 -1

4 6
2 3
4 4
3 5
5 2
7
0
1
2
3
4
5
6
0
2
2
2
3
3
5
4 6
2 3
4 4
3 5
5 2
7
0
1
2
3
4
5
6
0
2
2
2
3
3
5

数据范围与提示

对于所有数据,$1\le n,q \le 10^5,1\le v_i \le 10^9,0\le l_i\le m\le 10^9,c\in [0,m]$。

详细的数据限制及约定如下(留空表示和上述所有数据的约定相同):

Subtask # 分值(百分比) n,qn,q li,ml_i,m 特殊性质
11 1515 10\le 10 -
22 2020 100\le 100
33 - 对于每个 ii 存在非负整数 kk 满足 li=2k1l_i=2^k-1
44 20000\le 20000 li,vil_i,v_i 在范围内均匀随机(使用 std::mt19937 并对最大值取模)
55 2525 -