#P13514. [KOI 2025 #1] 干草堆

    ID: 15374 远端评测题 2000ms 1024MiB 尝试: 0 已通过: 0 难度: 5 上传者: 标签>线段树二分2025前缀和KOI(韩国)离线处理

[KOI 2025 #1] 干草堆

题目背景

试题来源:https://koi.or.kr/archives/。中文翻译做了少量本土化修改。

按照署名—非商业性使用—相同方式共享 4.0 协议国际版进行授权。

题目描述

一支带有力量 PP 的箭从数轴上的位置 0 向右方发射。在每个整数位置 ii (1iN1 \le i \le N),最多可以设置一个防御力为 DiD_i 的干草堆。

当箭撞到干草堆时,如果箭的力量小于或等于该干草堆的防御力,箭会立即停止。反之,如果箭的力量大于防御力,箭的力量会减去 DiD_i,然后穿过干草堆继续飞行。

对于两个整数 X,PX, P,我们将 f(X,P)f(X, P) 的值定义为“为了使力量为 PP 的箭在位置 XX 或其左侧停止所需要安装的干草堆的最小数量”。如果无论如何安装都无法使箭停止,则定义 f(X,P)=1f(X, P) = -1

请编写一个程序,对于 QQ 个整数对 (Xj,Pj)(X_j, P_j) (1jQ1 \le j \le Q),分别求出 f(Xj,Pj)f(X_j, P_j) 的值。

输入格式

第一行给定可以安装干草堆的位置数量 NN 和发射的箭的数量 QQ,以空格分隔。

第二行给定可以在位置 ii (1iN1 \le i \le N) 放置的干草堆的防御力 D1,D2,,DND_1, D_2, \cdots, D_N,以空格分隔。

从第三行开始的 QQ 行,给出 QQ 个整数对。其中第 jj (1jQ1 \le j \le Q) 行给定 XjX_jPjP_j,以空格分隔。

输出格式

输出 QQ 行。其中第 jj (1jQ1 \le j \le Q) 行输出 f(Xj,Pj)f(X_j, P_j) 的值。

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

提示

限制条件

  • 给定的所有数都是整数。
  • 1N,Q300,0001 \le N, Q \le 300,000
  • 对于每个 1iN1 \le i \le Nii,都有 1Di1091 \le D_i \le 10^9
  • 对于每个 1jQ1 \le j \le Qjj,都有 1XjN1 \le X_j \le N
  • 对于每个 1jQ1 \le j \le Qjj,都有 1Pj1091 \le P_j \le 10^9

子任务

  1. (6 分) N,Q18N, Q \le 18
  2. (16 分) N,Q5000N, Q \le 5000
  3. (18 分) 对于所有 1iN1 \le i \le NiiDi300D_i \le 300
  4. (32 分) 对于所有 1i<N1 \le i < NiiDiDi+1D_i \le D_{i+1}
  5. (28 分) N=QN=Q,且对于所有 1jQ1 \le j \le QjjXj=jX_j=j,且 P1=P2==PQP_1 = P_2 = \cdots = P_Q
  6. (16 分) 对于所有 1jQ1 \le j \le QjjXj=NX_j = N
  7. (12 分) 对于所有 1i<jN1 \le i < j \le Ni,ji, jDiDjD_i \ne D_j
  8. (22 分) 无附加限制条件。