#P15857. [Roir2026]在山峰间跳跃

    ID: 15068 传统题 1000ms 512MiB 尝试: 1 已通过: 1 难度: 10 上传者: 标签>CF3100分治计算几何倍增数据结构

[Roir2026]在山峰间跳跃

题目描述

在电脑游戏「超级跳跃」中,主角需要在一列山峰之间跳跃,目标是到达插着旗帜的终点。

山脉由 nn 个连续的尖峰组成,第 ii 个尖峰位于横坐标 ii,高度为 hih_i。对于任意 i<ji<j,主角可以从第 ii 个尖峰沿直线跳到第 jj 个尖峰,前提是在飞行过程中不会被其他尖峰挡住。

更形式化地说,不存在 kk 满足 i<k<ji<k<j,且第 kk 个尖峰的顶点 (k,hk)(k,h_k) 严格位于连接 (i,hi)(i,h_i)(j,hj)(j,h_j) 的线段上方。

公司「打败 AI」正在训练一个控制主角的神经网络。为了生成训练数据,需要回答若干询问:给定一对下标 l,rl,r,求主角从第 ll 个尖峰出发,到达第 rr 个尖峰所需的最少跳跃次数。

输入格式

第一行输入一个整数 nn,表示尖峰数量。

第二行输入 nn 个整数 h1,h2,,hnh_1,h_2,\ldots,h_n,表示各尖峰高度。

第三行输入一个整数 qq,表示询问数量。

接下来 qq 行,每行输入两个整数 li,ril_i,r_i,表示一次询问。

输出格式

对于每个询问,输出一个非负整数,表示最少需要的跳跃次数。

数据范围

1n1051\le n\le 10^5 0hi10120\le h_i\le 10^{12} 1q1051\le q\le 10^5 1lirin1\le l_i\le r_i\le n

样例

输入

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

输出

2
2
0

样例解释

考虑第二个询问,从第 22 个尖峰到第 77 个尖峰,可以选择路径:

2572\to 5\to 7

因此需要 22 次跳跃。

红色折线从高度为 33 的第 22 个山峰跳到高度为 66 的第 55 个山峰,再跳到高度为 11 的第 77 个山峰。

子任务

子任务 分值 附加限制 依赖子任务
1 9 n,q300n,q\le 300 -
2 n,q5000n,q\le 5000 1
3 14 hi10h_i\le 10 -
4 21 存在一个 kk,使得对所有询问 ii 都有 likril_i\le k\le r_i
5 27 n,q5104n,q\le 5\cdot 10^4 1, 2
6 20 1-5