最大不相交区间数量
题目描述
给定 N 个闭区间 [ai,bi]
,请你在数轴上选择若干区间,使得选中的区间之间互不相交(包括端点)。
输出可选取区间的最大数量。
输入格式
第一行包含整数 N
,表示区间数。
接下来 N
行,每行包含两个整数 ai,bi
,表示一个区间的两个端点。
输出格式
输出一个整数,表示可选取区间的最大数量。
数据范围
1≤N≤105
,
−109≤ai≤bi≤109
输入样例:
3
-1 1
2 4
3 5
输出样例:
2
这个题呢,跟区间选点类似。
因为区间选点可以把它理解成这样↓
相当于有多少个区间不想交
所以代码跟区间选点是一样的
#include <bits/stdc++.h>
using namespace std;
struct node{
int l,r;
}a[100005];
bool cmp(node a,node b){
return a.r < b.r;
}
int main(){
int n;
cin >> n;
for(int i = 1; i <= n; i ++) cin >> a[i].l >> a[i].r;
sort(a + 1,a + n + 1,cmp);
int res = 0,ed = -2e9;
for(int i = 1; i <= n; i ++){
if(a[i].l > ed){
ed = a[i].r;
res ++;
}
}
cout << res << endl;
return 0;
}