P14387 [JOISC 2017] 火车旅行 / Railway Trip

题目描述

JOI 铁路公司运营一条铁路。在 JOI 铁路的线路上,有 $N$ 个车站沿直线排列,编号从 $1$ 到 $N$。对于每个 $i$($1 \le i \le N - 1$),车站 $i$ 与车站 $i + 1$ 由一条铁轨连接。 JOI 铁路公司运营 $K$ 种类型的列车,每种列车均双向运行。列车类型用 $1$ 到 $K$(含)之间的整数表示。每个车站有一个“等级”,也是一个 $1$ 到 $K$(含)之间的整数。对于每个 $i$($1 \le i \le N$),车站 $i$ 的等级为 $L_i$。两端的车站,即车站 $1$ 和车站 $N$,等级均为 $K$。 类型为 $j$($1 \le j \le K$)的列车会在所有等级大于等于 $j$ 的车站停靠,且不在其他任何车站停靠。由于两端的车站(即车站 $1$ 和车站 $N$)等级均为 $K$,因此所有列车均在这两个车站停靠。 每天都有许多乘客使用 JOI 铁路。在旅途中,他们可以乘坐方向与目的地相反的列车,或者直接经过目的地。但在旅行结束时,他们必须在目的地车站下车。他们不喜欢在车站过多停靠,因此会尽量选择中间停靠站数量最少的路线,而不论经过的车站总数或换乘次数。若乘客在某个车站下车换乘,我们将其计为一次停靠。起点站的首次停靠和终点站的最后一次停靠不计入中间停靠站。 你的任务是编写一个程序,能够回答每位乘客的最小中间停靠站数量的查询。 **任务** 给定 JOI 铁路的信息,以及每位乘客的起始站和目的地,编写一个程序,能够回答每位乘客的最小中间停靠站数量的查询。

输入格式

从标准输入读取以下数据: - 输入的第一行包含三个以空格分隔的整数 $N$、$K$、$Q$。这表示 JOI 铁路有 $N$ 个车站,有 $K$ 种类型的列车,并给出 $Q$ 个关于两站之间旅行的查询。 - 接下来的 $N$ 行中,第 $i$ 行($1 \le i \le N$)包含一个整数 $L_i$,表示车站 $i$ 的等级。 - 接下来的 $Q$ 行中,第 $k$ 行($1 \le k \le Q$)包含两个以空格分隔的整数 $A_i$、$B_i$。这表示第 $k$ 位乘客的起始站和目的地分别为车站 $A_i$ 和 $B_i$。

输出格式

向标准输出写入 $Q$ 行。第 $k$ 行($1 \le k \le Q$)包含从车站 $A_k$ 到车站 $B_k$ 的路线中最小的中间停靠站数量。

说明/提示

### 样例 1 解释 在本样例输入中,给出了三个关于两站之间旅行的查询: - 第一个查询是关于从车站 2 到车站 4 的旅行。若乘客乘坐类型为 1 的列车从车站 2 直达车站 4,则仅有一个中间停靠站,即车站 3。 - 第二个查询是关于从车站 4 到车站 9 的旅行。若乘客先乘坐类型为 1 的列车从车站 4 到车站 5,再乘坐类型为 2 的列车从车站 5 到车站 1,最后乘坐类型为 3 的列车从车站 1 到车站 9,则共有三个中间停靠站,分别为车站 5、1 和 8。 - 第三个查询是关于从车站 6 到车站 7 的旅行。若乘客乘坐类型为 2 的列车从车站 6 直达车站 7,则无中间停靠站。 ### 样例 2 解释 请注意,乘客在旅途中可以经过目的地车站。 ### 数据范围 所有输入数据均满足以下条件: - $2 \le N \le 100\,000$。 - $1 \le K \le N$。 - $1 \le Q \le 100\,000$。 - $1 \le L_i \le K$($1 \le i \le N$)。 - $1 \le A_k \le N$($1 \le k \le Q$)。 - $1 \le B_k \le N$($1 \le k \le Q$)。 - $A_k \ne B_k$($1 \le k \le Q$)。 ### 子任务 共有 4 个子任务。每个子任务的得分及额外约束如下: **子任务 1 [5 分]** - $N \le 100$。 - $K \le 100$。 - $Q \le 50$。 **子任务 2 [15 分]** - $Q \le 50$。 **子任务 3 [25 分]** - $K \le 20$。 **子任务 4 [55 分]** 无额外约束。 翻译由 Qwen3-235B 完成