题目背景
试题来源:https://koi.or.kr/archives/。中文翻译做了少量本土化修改。
按照署名—非商业性使用—相同方式共享 4.0 协议国际版进行授权。
题目描述
一支带有力量 P 的箭从数轴上的位置 0 向右方发射。在每个整数位置 i (1≤i≤N),最多可以设置一个防御力为 Di 的干草堆。
当箭撞到干草堆时,如果箭的力量小于或等于该干草堆的防御力,箭会立即停止。反之,如果箭的力量大于防御力,箭的力量会减去 Di,然后穿过干草堆继续飞行。
对于两个整数 X,P,我们将 f(X,P) 的值定义为“为了使力量为 P 的箭在位置 X 或其左侧停止所需要安装的干草堆的最小数量”。如果无论如何安装都无法使箭停止,则定义 f(X,P)=−1。
请编写一个程序,对于 Q 个整数对 (Xj,Pj) (1≤j≤Q),分别求出 f(Xj,Pj) 的值。
输入格式
第一行给定可以安装干草堆的位置数量 N 和发射的箭的数量 Q,以空格分隔。
第二行给定可以在位置 i (1≤i≤N) 放置的干草堆的防御力 D1,D2,⋯,DN,以空格分隔。
从第三行开始的 Q 行,给出 Q 个整数对。其中第 j (1≤j≤Q) 行给定 Xj 和 Pj,以空格分隔。
输出格式
输出 Q 行。其中第 j (1≤j≤Q) 行输出 f(Xj,Pj) 的值。
5 6
2 5 6 1 12
1 1
5 14
2 8
3 7
4 14
5 1
1
2
-1
2
4
1
5 5
3 6 1 1 10
1 10
2 10
3 10
4 10
5 10
-1
-1
3
3
1
提示
限制条件
- 给定的所有数都是整数。
- 1≤N,Q≤300,000
- 对于每个 1≤i≤N 的 i,都有 1≤Di≤109。
- 对于每个 1≤j≤Q 的 j,都有 1≤Xj≤N。
- 对于每个 1≤j≤Q 的 j,都有 1≤Pj≤109。
子任务
- (6 分) N,Q≤18。
- (16 分) N,Q≤5000。
- (18 分) 对于所有 1≤i≤N 的 i,Di≤300。
- (32 分) 对于所有 1≤i<N 的 i,Di≤Di+1。
- (28 分) N=Q,且对于所有 1≤j≤Q 的 j,Xj=j,且 P1=P2=⋯=PQ。
- (16 分) 对于所有 1≤j≤Q 的 j,Xj=N。
- (12 分) 对于所有 1≤i<j≤N 的 i,j,Di=Dj。
- (22 分) 无附加限制条件。