P9331 [JOIST 2023] 护照 / Passport
题目描述
护照是旅行家进入他国时使用的证件。
在一个星球上有 $N$ 个国家,从 $1$ 到 $N$ 编号。每个国家都签发一种护照。当旅行家获得由国家$i \ (1 \le i \le N)$ 签发的护照后,他能够进入国家 $L_i, L_i + 1, \dots, R_i$。**这里保证旅行家能够进入其签证的签发国。形式上地说, $L_i \le i \le R_i$ 必然成立。**
你有一个爱旅行的朋友。即使他奢望能环游世界,但他最初一种护照也没有。因此,他想通过一下重复以下两项行为来环游这 $N$ 个国家。
- 获得他当前所在国家签发的护照。
- 用他现有的护照进入某个国家。
知道他的计划后,你想知道这个计划的是否可行,和如果可行的话,他最少需要的护照数量。因为你并不清楚他现在身处何国,所以你预测了 $Q$ 个他可能正居住在那的国家 $X_1, X_2, \dots, X_Q$。
现在给定各国护照的信息 $L_i, R_i$ 和他可能居住的 $Q$ 个国家,您需要写一个程序,对于每一个可能居住的国家,判断他是否可能环游这 $N$ 个国家,如果可能的话,计算出他需要的最少护照种数。
输入格式
从标准输入读入:
> $N$
>
> $L_1 \ R_1$
>
> $L_2 \ R_2$
>
> $\vdots$
>
> $L_N \ R_N$
>
> $Q$
>
> $X_1$
>
> $X_2$
>
> $\vdots$
>
> $X_Q$
输出格式
输出 $Q$ 行至标准输出,第 $j \ (1 \le j \le Q)$ 行一个整数代表若你的朋友位于国家 $X_j$ 的答案。若他能环游这 $N$ 个国家,则输出他需要的最少护照种数,否则输出 $-1$。
说明/提示
**【数据范围】**
对于所有测试数据,满足 $2 \le N \le 2 \times 10 ^ 5$,$1 \le L_i \le i \le R_i \le N$,$1 \le Q \le N$,$1 \le X_1 < X_2 < \dots < X_Q \le N$,保证所有输入均为整数。
|子任务编号|分值|限制|
|:-:|:-:|:-:|
|$1$|$6$|$Q = 1$,$X_1 = 1$|
|$2$|$16$|$N \le 300$,$Q = 1$|
|$3$|$24$|$N \le 2500$,$Q = 1$|
|$4$|$8$|$N \le 2500$|
|$5$|$46$|无|
**【样例解释 #1】**
假设你的朋友居住在国家 $X_1 = 1$,一种可行的方式如下,最后他获得了 $2$ 种护照:
1. 获得国家 $1$ 签发的护照。
2. 用国家 $1$ 签发的护照去国家 $2$ 旅行。
3. 获得国家 $2$ 签发的护照。
4. 用国家 $1$ 签发的护照去国家 $3$ 旅行。
5. 用国家 $2$ 签发的护照去国家 $4$ 旅行。
可以证明不存在使用护照种数更小的方案,故输出 $2$。
该样例满足所有子任务的限制。
**【样例解释 #2】**
假设你的朋友居住在国家 $X_1 = 3$。一种可行的方式如下,最后他获得了 $4$ 种护照:
1. 获得国家 $3$ 签发的护照。
2. 用国家 $3$ 签发的护照去国家 $2$ 旅行。
3. 获得国家 $2$ 签发的护照。
4. 用国家 $2$ 签发的护照去国家 $4$ 旅行。
5. 获得国家 $4$ 签发的护照。
6. 用国家 $4$ 签发的护照去国家 $5$ 旅行。
7. 获得国家 $5$ 签发的护照。
8. 用国家 $5$ 签发的护照去国家 $1$ 旅行。
可以证明不存在使用护照种数更小的方案,故输出 $4$。
该样例满足子任务 $2 \sim 5$ 的限制。
**【样例解释 #3】**
例如,如果你的朋友居住在 $X_3 = 3$,一种可行的方案书获得国家 $3$ 签发的护照,并用它来依次去国家 $1, 2, 4, 5$ 旅行。故第三行输出 $3$。
但如果你的朋友居住在国家 $X_5 = 5$,即使他获得了国家 $5$ 签发的护照,他也不可能进入任何其他国家,因此,他无法实现自己的旅行计划。故第五行输出 $-1$。
该样例满足子任务 $4 \sim 5$ 的限制。
**【样例解释 #4】**
该样例满足子任务 $4 \sim 5$ 的限制。