0
点赞
收藏
分享

微信扫一扫

区间合并(模板)

晴儿成长记 2022-01-12 阅读 82

803. 区间合并

在这里插入图片描述

思路:

由这个题来介绍一下区间合并的具体实现
首先看题目,题目的意思求合并之后,有几个不相交的区间
1.所以可以将区间按左区间从小到大排序
2.合并:第二个区间的起点在第一个区间的范围里,则更新区间的右端点(取两个区间的最大值)

源码

#include<bits/stdc++.h>

using namespace std;


const int N=100010;
typedef pair<int,int>PII;

int n;
vector<PII>segs;

void merge(vector<PII> &segs){
    vector<PII> res;
    
    sort(segs.begin(),segs.end());
    int st=-2e9,ed=-2e9;
    
    for(int i=0;i<segs.size();i++){
        if(ed<segs[i].first){
            if(st!=-2e9) res.push_back({st,ed});//初始不为空,则加入
            st =segs[i].first,ed=segs[i].second;
        }
        else ed=max(ed,segs[i].second);
    }
    if(st!=-2e9) res.push_back({st,ed}); //判断只有一个的情况
    segs=res;
}

int main(){
    cin>>n;
    
    for(int i=0;i<n;i++){
        int l,r;
        cin>>l>>r;
        segs.push_back({l,r});
    }
    
    merge(segs);
    cout<<segs.size()<<endl;
}
举报

相关推荐

0 条评论