

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
typedef pair<int ,int> PII;
int n;
vector<PII> segs;
void merge(vector<PII> &segs){
vector<PII> res; //存放合并好的区间
sort(segs.begin(),segs.end()); //pair排序优先按照first
int st=-2e9,ed=-2e9;
for(auto seg:segs){
if(ed<seg.first){ //和当前的无交集 当前的进入res
if(st!=-2e9) res.push_back({st,ed});
st=seg.first; ed=seg.second;
}
else ed=max(ed,seg.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();
}
该博客主要介绍了如何使用C++实现区间合并的功能。通过排序区间起点并检查相邻区间是否有交集,有效地合并了多个区间。核心算法是通过对区间进行排序和迭代更新,最后输出合并后的区间数量。
418

被折叠的 条评论
为什么被折叠?



