#P2688. 大海战

大海战

题目背景

一天,GD和MW正在玩一款名叫大海战的游戏。

题目描述

游戏在一个 1×n1 \times n 的棋盘上进行。一开始 GD 拥有 cc 种战舰,每种战舰的宽度为 11,长度为 cic_i,共有 tit_i 个。GD 要将所有这些战舰放置在棋盘上,并且任意两艘战舰间不能重叠(但可以相邻)。

接下来,MW 进行 qq 次“攻击”,每次攻击一个 1×11 \times 1 的格子,而 MW 将告知他这次攻击是否“打中”了一艘战舰(或者它的某个部分)。

令人疑惑的是,每次 MW 都告诉 GD 说他没有打中任何一艘战舰,而这显然是不现实的。现在 MW 把整个游戏的过程告诉了你,他想知道,最早在他的第几次询问之后,可以断定 GD 一定(至少有一次)说了谎。

输入格式

本题单测试点内有多组数据

第一行一个整数 tt,表示测试数据的组数。

每组数据的输入格式如下:

每组数据的第一行有三个整数,分别代表棋盘的长度 nn 、战舰的种数 cc 和攻击的次数 qq

对于每组数据的第 22 到第 (c+1)(c + 1) 行,每行两个整数,第 (i+1)(i + 1) 行的两个整数分别代表第 ii 种战舰的长度 cic_i 和数量 tit_i

(c+2)(c + 2) 行有 qq 个整数,第 ii 个整数 aia_i 代表 MW 第 ii 次攻击的位置。

输出格式

对于每组数据,输出一个整数 ansans,表示最早在第 ansans 次操作后可以断定 GD 说了谎。特别地,如果一开始就不可能按要求摆上所有的战舰,输出 00;如果 qq 次询问后都不能判断 GD 是否说了谎,则输出 1-1

3
12 2 2
1 1
2 5
6 8
5 1 2
3 1
1 5
11 3 0
2 2
3 1
5 1
2
-1
0

提示

样例输入输出 1 解释

  • 对于第一个样例,存在布阵 {1,22,22,0,22,22,22}\{1,22,22,0,22,22,22\}00 表示没有放置),使得第一次不会受到攻击;不存在一个布阵使得两次都没有受到攻击。
  • 对于第二个样例,存在布阵 {0,333,0}\{0,333,0\},使得两次均不会受到攻击。
  • 对于第三个样例,一开始就不可能把所有战舰合法地布置在棋盘上。

数据规模与约定

  • 对于测试点1,n1000000000n \leq 1000000000c100000c \leq 100000q=0q=0
  • 对于测试点2、3,所有的 tit_i 均为 11
  • 对于测试点2-8,n400000n \leq 400000c100c \leq 100q=1q=1
  • 对于测试点9,n100n \leq 100c=1c=1q100q \leq 100
  • 对于测试点10-14,n200000n \leq 200000c=1c=1q200000q \leq 200000
  • 对于测试点15、16,n200n \leq 200c=2c=2q200q \leq 200
  • 对于测试点17-20,n4000n \leq 4000c=2c=2q4000q \leq 4000
  • 对于 100%100\% 的数据,$1 \le t \le 5,n \ge 1,c \ge 1,q \ge 0,1 \le q_i \le n,0 \le c_i \le 10^5,0 \le t_i \le 10^5$。

提示

  • 请注意常数因子对程序效率造成的影响。