S42406.24-6 调度哨兵

传统题 时间 1000 ms 内存 256 MiB 3 尝试 0 已通过 0

24-6 调度哨兵

调度哨兵

长链找到了,但Zero的核心需要哨兵——需要调度。

"调度?"CC问。

"对。"你说,"nn个哨兵,每个有一个警戒区间[li,ri][l_i,r_i]。选最少的哨兵,覆盖整个[1,m][1,m]区间。"

"覆盖?"

"对。"你说,"每一点至少被一个哨兵覆盖。"

"最少?"

"对。"你说,"贪心——按左端点排序,每次选能覆盖当前点且右端点最远的哨兵。"

"贪心?"

"对。"你说,"局部最优——每次尽量走远。"

"第47个哨兵。"你说,"区间为[47,100][47,100]。"

"选不选?"

"看当前走到哪。"你说,"如果当前点47\le 47,选它能走到100。"

"远吗?"

"对。"你说,"如果m=100m=100,选了它,后面就不用选了。"

"如果m=200m=200?"

"不够。"你说,"还要选别的。"

"咋选?"

"继续贪心。"你说,"从100开始,再找能覆盖100且最远的。"

"像跳房子?"

"对。"你说,"像跳房子——每一步尽量跳远。"

"掉下去?"

"如果中间有空隙,就掉下去了。"你说,"说明无解。"

"无解?"

"对。"你说,"如果哨兵的区间有空隙,就盖不住。"

CC看着那些区间——像一块块布,像一片片瓦,像某种需要拼接的东西。

"能拼上吗?"她问。

"能。"你说,"如果没有空隙,就能拼上。"

"拼上好吗?"

"对。"你说,"拼上就能覆盖整个区间。"

Echo把覆盖过程投射出来——一块一块,像拼图,像铺路。

"以前我的区间是断的。"她说,"现在……连上了。"

"因为你在补。"CC说。

"对。"Echo说,"因为我在补。"


题目描述

nn个区间[li,ri][l_i,r_i],选最少区间覆盖[1,m][1,m]

输入格式

第一行nnmm。接下来nn行,每行lil_irir_i

输出格式

最少区间数。无解输出1-1


输入样例

5
1 2 3 4 5

输出样例

0

提示

  • 按左端点排序。
  • 贪心:每次选能覆盖当前点且右端点最大的区间。
  • 时间复杂度O(nlogn)O(n\log n)

在线编程 IDE

建议全屏模式获得最佳体验