(七)、区间合并

https://www.acwing.com/problem/content/805/

一、题干

 

 

 

 

 

 

二、代码

AC代码

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
//1、排序    //2、从左到右遍历
typedef pair<int,int> PTT;
int n;
vector<PTT> segs; 
void merge(){
    vector <PTT> res;
    int l = -2e9,r = -2e9;    // 维护区间 
    for(auto seg : segs){
        if(r < seg.first){
            if(l!=-2e9) res.push_back({l,r});  // 去除第一次 
            l = seg.first,r = seg.second;
        }else r = max(r,seg.second);
    }
    if(l != -2e9) res.push_back({l,r});   // 特判全为一个区间
    cout<<res.size()<<endl; 
}
int main(){
    scanf("%d",&n);
    for(int i =0;i<n;i++){
        int l,r;
        scanf("%d%d",&l,&r);
        segs.push_back({l,r});
    }
    sort(segs.begin(),segs.end());   // Sort 对 pair 排序的时候,先排pair左边的元素,后排pair后面的元素 
    merge();
    
    return 0;
}

 

posted @ 2023-01-09 23:28  TLSN  阅读(17)  评论(0)    收藏  举报