Skip to content

Latest commit

 

History

History

0908

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

题目

给定 $N$ 个闭区间 $[a_i,b_i]$,请你在数轴上选择若干区间,使得选中的区间之间互不相交(包括端点)。

输出可选取区间的最大数量。

输入格式

第一行包含整数 $N$,表示区间数。

接下来 $N$ 行,每行包含两个整数 $a_i,b_i$,表示一个区间的两个端点。

输出格式

输出一个整数,表示可选取区间的最大数量。

数据范围

$1 \le N \le 10^5$,

$-10^9 \le a_i \le b_i \le 10^9$

输入样例:

3
-1 1
2 4
3 5

输出样例:

2

题解

前置题目:0905

前置知识:无

本题知识:贪心-区间问题

题目分析

思路:

  1. 将每个区间按右端点从小到大排序
  2. 从前往后依次枚举每个区间
    • 如果当前区间中已经包含点,则pass
    • 否则,选择当前区间的右端点

贪心问题思路不复杂,难点在证明算法的正确性

证明:设题目的答案为 i,算法求出来的是 j,证明 i == j

  1. i >= j 按照上述思路求出的解,两两区间不相交满足题意,i 是满足题意的最大值,故 i >= j
  2. i <= j 反证法,假设 i > j,则最多有 i 个区间两两不相交,最少需要 i 个点覆盖所有区间,而根据上述思路只需 j 个点即可覆盖所有区间且 j < i,两相矛盾,故 i <= j
  3. i == j ∎

最大不相交区间数 == 最少覆盖区间点数