跳台滑雪
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

跳台滑雪是冬奥会历史上最悠久的项目之一。选手踩着滑雪板在跳台上起滑、加速,从跳台末端飞出后,身体前倾沿抛物线在空中飞行,最后落在山坡上。裁判员会根据运动员的飞行距离和动作完成情况评分。

L同学最近喜欢上了冬奥会的跳台滑雪项目,并且参加了一场线上跳台滑雪比赛。已知跳台选手有N种可以选择的动作姿式,每种动作都有各自的成功率pi与难度分ri,如果成功则获得相应的难度分,如果失败则不得分。小L同学最后一个出场,现在他知道了M个对手的得分ci,以及自己的得分S,他希望自己在完成下一个动作后的名次能够到达前K名(可以与其他人并列第K名)。请问他应该如何选择下一个动作,才能在保证排名小于等于K的前提下,使成功率最大。

输入描述:

第一行输入三个正整数N、M、Q,分别表示可选动作姿式的数量、跳台对手的数量、以及查询的次数;

接下来的N行,每行输入一个浮点数pi和一个正整数ri,分别表示第i个动作的成功率和难度分;

接下来的一行输入M个正整数c1,…,cM,其中ci表示第i个对手目前的得分,保证每个对手的得分不同;

接下来的Q行,每行输入两个正整数S和K,分别表示小L同学目前的得分以及预期的名次。

(1<=N、M、Q<=10^5,0<pi<1,1<=ri、ci、S<=10^6,1<=K<=M)

输出描述:

对于每组测试数据,输出Q行答案,即对于每次查询,输出小L同学要选择的动作的下标(从0开始)。如果有多个符合条件的动作,首先选择分数最高的。如果分数和成功率都相同,选择下标最小的。如果不可能到达目标名次,输出-1。

示例1

输入

复制
5 3 2
0.2 10
0.5 9
0.4 8
0.9 7
0.7 2
5 10 15
2 2
2 1

输出

复制
1
-1

说明

对于第1次查询,有编号为0、1、2的三种动作可以到达前2名。如果选择编号为0的动作,成功率0.2,得分12.0,排名第2;如果选择编号为1的动作,成功率0.5,得分11.0,排名第2;如果选择编号为2的动作,成功率0.4,得分10.0,排名并列第2。所以选择编号为1的动作成功率最高。

对于第2次查询,不论选择哪个动作,最终得分都不会超过12.0分,所以名次不可能上升到第1名或者并列第1名。