#P15681. [Bulgarian2023训练营]Summer School夏令营

[Bulgarian2023训练营]Summer School夏令营

题目描述

彼得抵达程序设计夏令营当天得知,主办方组织了 NN 场关于算法竞赛的有趣讲座。他不想错过这个机会,于是立刻开始规划自己要听哪些讲座,并将讲座从 11NN 编号。

他拿到的课程表中标明:第 ii 场讲座开始时间为 SiS_i,结束时间为 EiE_i

彼得决定从编号为 XX 的讲座开始听,并以编号为 ZZ 的讲座作为最后一场讲座。

彼得只有在某场讲座已经开始后,才能加入这场讲座。一旦进入某场讲座,他必须一直待到这场讲座结束;但最后一场讲座例外。之后,他必须立即切换到另一场正在进行的讲座。

因此,彼得能从讲座 ii 切换到讲座 jj 当且仅当:

SjEiEjS_j\le E_i\le E_j

频繁切换主题会让彼得分心和困惑。因此,他想知道:如果从讲座 XX 开始,最后到达讲座 ZZ,最少需要切换多少次讲座。

给定 MM 个不同的起点终点询问 (Xk,Zk)(X_k,Z_k),请编写程序 hop,对每个询问输出最少切换次数;若无法做到,输出 impossible

输入格式

第一行包含两个整数 N,MN,M,分别表示讲座数量和询问数量。

接下来 NN 行描述讲座时间表。第 ii 行包含两个整数 Si,EiS_i,E_i,分别表示第 ii 场讲座的开始时间和结束时间。

接下来 MM 行描述询问。第 kk 行包含两个整数 Xk,ZkX_k,Z_k,表示彼得从讲座 XkX_k 开始,希望最后听到讲座 ZkZ_k

输出格式

输出 MM 行。第 kk 行输出一个整数,表示从讲座 XkX_k 到讲座 ZkZ_k 所需的最少切换次数;若不可能,则输出:

impossible

数据范围

  • 1N,M1000001\le N,M\le 100000
  • 1Si<Ei1091\le S_i<E_i\le 10^9
  • 1Xk,ZkN1\le X_k,Z_k\le N,其中 1kM1\le k\le M

子任务

子任务 分值 附加限制
1 10 从每场讲座至多能切换到一场其他讲座
2 N1000N\le 1000M100M\le 100
3 15 N5000N\le 5000
4 M100M\le 100
5 20 不存在一场讲座完全包含在另一场讲座中,即不存在 iji\ne j 使 SiSj<EjEiS_i\le S_j<E_j\le E_i
6 30 无附加限制

样例 1

输入

5 2
1 3
2 4
4 7
7 9
3 7
1 4
3 2

输出

2
impossible

样例 2

输入

8 5
1 2
3 4
1 5
6 7
5 10
10 20
15 20
999999999 1000000000
1 6
1 7
2 4
3 3
5 8

输出

3
4
impossible
0
impossible

样例解释

在第一个样例中,可以从讲座 11 开始,切换到讲座 55,再切换到讲座 44,共需要两次切换。

但是,不可能从讲座 33 开始并以讲座 22 结束,因为讲座 22 在讲座 33 之前结束。