给定N个闭区间[ai,biai,bi],请你在数轴上选择若干区间,使得选中的区间之间互不相交(包括端点)。
输出可选取区间的最大数量。
输入格式
第一行包含整数N,表示区间数。
接下来N行,每行包含两个整数ai,biai,bi,表示一个区间的两个端点。
输出格式
输出一个整数,表示可选取区间的最大数量。
数据范围
1≤N≤1051≤N≤105,
−109≤ai≤bi≤109−109≤ai≤bi≤109
输入样例:
3
-1 1
2 4
3 5
输出样例:
2
解题思路:先对左端点排个序,然后挨个扫一遍就行。
代码如下:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e5+10;
struct dis{
int x,y;
}dd[maxn];
bool cmp(dis a,dis b){
return a.x<b.x;
}
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>dd[i].x>>dd[i].y;
}
int ans=1;
sort(dd,dd+n,cmp);
int xx=0,yy=dd[0].y;
for(int i=1;i<n;i++){
if(yy>=dd[i].x){
yy=min(yy,dd[i].y);
}else{
ans++;
yy=dd[i].y;
}
}
cout<<ans<<endl;
return 0;
}