给定 N𝑁 个闭区间 [ai,bi][𝑎𝑖,𝑏𝑖],请你在数轴上选择若干区间,使得选中的区间之间互不相交(包括端点)。
输出可选取区间的最大数量。
输入格式
第一行包含整数 N𝑁,表示区间数。
接下来 N𝑁 行,每行包含两个整数 ai,bi𝑎𝑖,𝑏𝑖,表示一个区间的两个端点。
输出格式
输出一个整数,表示可选取区间的最大数量。
数据范围
1≤N≤1051≤𝑁≤105,
−109≤ai≤bi≤109−109≤𝑎𝑖≤𝑏𝑖≤109
输入样例:
3
-1 1
2 4
3 5
输出样例:
2
代码:
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 100010;
int n;
struct Range
{
int l, r;
}range[N];
bool cmp(Range a,Range b){ //右端递增排序
return a.r<b.r;
}
int main()
{
scanf("%d", &n);
for (int i = 0; i < n; i ++ ) scanf("%d%d", &range[i].l, &range[i].r);
sort(range, range + n,cmp);
int res = 0, ed = -2e9;
for (int i = 0; i < n; i ++ ) //代码跟区间选点是一样的
if (ed < range[i].l)
{
res ++ ;
ed = range[i].r;
}
printf("%d\n", res);
return 0;
}