合并区间
#include <bits/stdc++.h>
using namespace std;
int n,l,r;
typedef pair<int,int> P;
vector<P> segs;
const int INF=-2e9;
void merge(vector<P> &segs){//合并函数
vector<P> ans;
sort(segs.begin(),segs.end());//排序,pair先比first再second
int st=INF,ed=INF;//初始化设为比无穷小
for(auto seg:segs){//遍历区间
if(ed<seg.first){//如果两邻近区间不相交
if(st!=INF) ans.push_back({st,ed});//现区间结束记录,但如果Seg是第一个st还是初始化要排除
st=seg.first, ed=seg.second;//替换现区间
}else ed=max(ed,seg.second);//如果两邻近区间有交集
}
if(st!=INF)ans.push_back({l,r});//最后,最后一个区间要手动压入
segs=ans;
}
int main(int argc, char** argv) {
cin>>n;
for(int i=0;i<n;i++){
scanf("%d%d",&l,&r);
segs.push_back({l,r});//记录区间
}
merge(segs);//合并函数 ,Seg引用&
cout<<segs.size()<<endl;
return 0;
} 
京公网安备 11010502036488号