区间选点

区间选点

给定 N 个闭区间 [\(a_i,b_i\)],请你在数轴上选择尽量少的点,使得每个区间内至少包含一个选出的点。

输出选择的点的最小数量。

位于区间端点上的点也算作区间内。

输入格式

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

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

输出格式

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

数据范围

输入样例

1
2
3
4
3
-1 1
2 4
3 5

输出样例

1
2

解法:

目的:用尽可能少的点覆盖所有区间

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include "iostream"
#include "algorithm"

using namespace std;

const int N =100010;

struct Range{
int l,r;
bool operator<(const Range &w){
return this->r<w.r;
}
};

Range range[N];

int main() {
int n;
scanf("%d",&n);
for (int i = 1; i <= n; i++)
scanf("%d%d",&range[i].l,&range[i].r);
sort(range+1,range+n+1);
int res=0,end=-2e9;
for (int i = 1; i <= n; i++)
if (end<range[i].l){
end=range[i].r;
++res;
}
printf("%d\n",res);
return 0;
}

区间选点
http://example.com/2022/06/19/区间选点/
作者
Charry
发布于
2022年6月19日
许可协议