#B0185. 最少跳跃次数

最少跳跃次数

题目描述

数轴上有 nn 个位置,编号为 11nn

对于每个位置 ii,给定一个整数 rir_i,表示当你站在位置 ii 时,本轮最多可以跳到区间 [i+1,ri][i+1, r_i] 中的任意一个位置。

保证:

  • 对于所有 1i<n1 \le i < n,都有 i+1rini+1 \le r_i \le n
  • rn=nr_n = n
  • 序列满足 r1r2rnr_1 \le r_2 \le \dots \le r_n

现在有若干次询问,每次给出两个整数 llrr。你从位置 ll 出发,想要用尽量少的跳跃次数到达某个编号不小于 rr 的位置。

请输出最少需要多少次跳跃。

输入格式

第一行包含两个整数 nnqq,分别表示位置数量和询问次数。

第二行包含 nn 个整数 r1,r2,,rnr_1, r_2, \dots, r_n

接下来 qq 行,每行包含两个整数 llrr,表示一次询问。

数据范围:

  • 1n,q2×1051 \le n, q \le 2 \times 10^5
  • 对于所有 1i<n1 \le i < n,都有 i+1rini+1 \le r_i \le n
  • rn=nr_n = n
  • r1r2rnr_1 \le r_2 \le \dots \le r_n
  • 1lrn1 \le l \le r \le n

输出格式

对于每次询问,输出一行一个整数,表示最少跳跃次数。

8 5
3 5 5 7 8 8 8 8
1 8
2 6
4 8
5 5
3 7
3
2
2
0
2