在苏门答腊岛的热带雨林中,有
PakDengklek 正在训练一只猩猩,让她能够从一棵树上跳到另一棵树上。对于一次跳跃,猩猩可以从一棵树,向左或向右跳到比当前这棵树高的第一棵树上。形式化地,如果猩猩当前在
是满足 的所有 中比 小的最大非负整数;或者: 是满足 的所有 中比 大的最小非负整数。
PakDengklek 有
实现细节
你需要实现下列函数:
void init(int N, int[] H)
:树的数量。 :大小为 的数组, 表示 号树的高度。- 该函数在第一次
minimum_ jumps
的调用前,将会被调用恰好一次。
int minimum_jumps(int A, int B, int C, int D)
:可以用作起点的树的编号范围。 :可以用作终点的树的编号范围。- 该函数需要返回可行方案中猩猩需要的最少跳跃次数,或者返回
表示该计划不可行。 - 该函数将被调用恰好
次。
例子
考虑如下调用:
init(7, [3, 2, 1, 6, 4, 5, 7])
在初始化完成后,考虑如下调用
minimum_jumps(4, 4, 6, 6)
该计划意味着猩猩必须从
一种跳跃次数最少的可行方案为:先跳到
另一种方案为:先跳到
因此,minimum_jumps
应该返回
考虑另一个调用:
minimum_jumps(1, 3, 5, 6)
该计划意味着猩猩必须从
唯一一种跳跃次数最少的可行方案为:从
因此,minimum_jumps
应该返回
考虑另一个调用:
minimum_jumps(0, 1, 2, 2)
该计划意味着猩猩必须从
由于
因此,minimum_jumps
应该返回
输入格式
示例测试程序按如下格式读取输入数据:
- 第
行: - 第
行: - 第
行: ,表示第 次minimum_jumps
调用的参数。
输出格式
示例测试程序按如下格式输出你的答案:
- 第
行:第 次minimum_jumps
调用的返回值。
限制与约定
对于所有数据:
子任务:
实际测试中,前 16 个 subtask 为数据包,后 7 个 subtask 为 7 个子任务。
- (
分) - (
分) - (
分) - (
分) - (
分) - (
分) - (
分) 无附加限制
时间限制:
空间限制: