#CF1945G. 厨师与粥
厨师与粥
G. 厨师与粥
单个测试点时间限制: 秒 单个测试点内存限制: 兆字节
终于到午饭时间了!
有 名小学生在厨师的帐篷前排成长队等候喝粥。厨师会在接下来的 分钟内分发粥。 队列中第 位学生的优先级为 ,吃掉一份粥需要 分钟。
在休息时间的每一分钟开始时,厨师会给队列的第一位学生盛一份粥,之后这名学生就去吃粥。 如果第 名学生在第 分钟开始时被分到粥,那么他会在第 分钟结束时回到队列。
当第 名学生回到队列时,队列末尾所有优先级严格低于 的学生都必须给他让路。 也就是说,他会插到队列中最后一个优先级不低于他的学生后面,即最后一个满足 的学生 的后方。 如果队列中不存在这样的学生,这名学生就会站到队首。
如果多名学生同时返回,他们会按照 升序依次回到队列。
例如,当 ,,, 时,分发过程如下:
- 第 分钟开始,队列为 ,学生 分到粥;
- 第 分钟开始,队列为 ,学生 分到粥;
- 第 分钟开始,队列为 ,学生 分到粥;
- 第 分钟结束,学生 回到队列,队列变为 ;
- 第 分钟结束,学生 回到队列,由于优先级更低,队列变为 。
你需要求出:从休息开始,最少经过多少分钟,每名学生都至少分到过一次粥。 如果在 分钟内无法做到,输出 。
输入格式
输入包含多组测试数据。 第一行一个整数 (),表示测试用例数量。
每组测试用例格式如下: 第一行两个整数 和 (,),分别表示队列中学生人数和总时长。
接下来 行,每行两个整数 和 (),分别表示第 名学生的优先级和吃粥时间。 学生按初始队列顺序给出(从队首到队尾)。
保证所有测试用例的 之和不超过 ,所有测试用例的 之和不超过 。
输出格式
对于每组测试用例,输出一个整数,表示所有学生都至少分到一次粥的最早时间。 如果在 分钟内无法完成,输出 。
样例输入
7
3 3
2 2
3 1
2 3
5 10
10 3
7 1
11 3
5 1
6 1
5 20
4 2
7 2
8 5
1 5
3 1
5 17
1 3
8 2
8 3
2 2
1 1
5 14
8 2
4 2
1 3
8 3
6 4
1 11
4 5
5 14
8 2
4 2
1 3
8 3
6 4
样例输出
3
-1
12
6
6
1
6