欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

[C++][算法基础]不相交区间的最大数目(贪婪 +区间问题 2)

最编程 2024-04-30 20:06:45
...

给定 ???? 个闭区间 [????????,????????],请你在数轴上选择若干区间,使得选中的区间之间互不相交(包括端点)。

输出可选取区间的最大数量。

输入格式

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

接下来 ???? 行,每行包含两个整数 ????????,????????,表示一个区间的两个端点。

输出格式

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

数据范围

1≤????≤10^{5},
10^{9}≤????????≤????????≤10^{9}

输入样例:
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;
}