第 3 题 干草堆 (haystack)
时间限制 1.0 s · 空间限制 256 MB · 112 个测试点 · 全文比较(过滤行末空格及文末回车)
本题使用文件输入输出:输入文件 haystack.in,输出文件 haystack.out。
题目描述
从数轴的坐标 0 处向右发射一支具有整数大小力量的箭。在每个整数坐标 i(1≤i≤N)上,最多可以放置一个防御力为 Di 的干草堆。
当箭撞到干草堆时,若箭的力量小于或等于防御力,则箭立即停下;反之,若箭的力量大于防御力,则力量先减少 Di,然后箭穿透干草堆继续飞行。
对于两个整数 X,P,定义 f(X,P) 为“为了使力量为 P 的箭在坐标 X 处或坐标 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) 的值。
样例
样例 1
输入:
文本
5 6
2 5 6 1 12
1 1
5 14
2 8
3 7
4 14
5 1
输出:
样例 2
输入:
文本
5 5
3 6 1 1 10
1 10
2 10
3 10
4 10
5 10
输出:
数据范围
- 所有给出的数均为整数。
- 1≤N,Q≤300000。
- 对所有 i(1≤i≤N),1≤Di≤109。
- 对所有 j(1≤j≤Q),1≤Xj≤N。
- 对所有 j(1≤j≤Q),1≤Pj≤109。
子任务
- (6 分)N,Q≤18。
- (16 分)N,Q≤5000。
- (18 分)对所有 i(1≤i≤N),Di≤300。
- (32 分)对所有 i(1≤i<N),Di≤Di+1。
- (28 分)N=Q,且对所有 j(1≤j≤Q),Xj=j,P1=P2=⋯=PQ。
- (16 分)对所有 j(1≤j≤Q),Xj=N。
- (12 分)对所有 i<j(1≤i<j≤N),Di=Dj。
- (22 分)无附加约束。