[C++][算法基础]不相交区间的最大数目(贪婪 +区间问题 2)
最编程
2024-04-30 20:06:45
...
给定 ???? 个闭区间 [????????,????????],请你在数轴上选择若干区间,使得选中的区间之间互不相交(包括端点)。
输出可选取区间的最大数量。
输入格式
第一行包含整数 ????,表示区间数。
接下来 ???? 行,每行包含两个整数 ????????,????????,表示一个区间的两个端点。
输出格式
输出一个整数,表示可选取区间的最大数量。
数据范围
1≤????≤,
−≤????????≤????????≤
输入样例:
3
-1 1
2 4
3 5
输出样例:
2
代码:
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 100010;
int n,l,r;
vector<pair<int,int>> Interval;
int main(){
cin>>n;
for(int i = 0;i < n;i ++){
cin>>l>>r;
Interval.push_back({r,l});
}
sort(Interval.begin(),Interval.end());
int res = 0, RightEnd = -2e9;
for(int i = 0;i < n;i ++){
int left = Interval[i].second;
int right = Interval[i].first;
if(left > RightEnd){
res ++;
RightEnd = right;
}
}
cout<<res<<endl;
return 0;
}