#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
typedef pair<int ,int> PII;
vector<PII> segs;//segs存放要合并的各个区间;
//区间合并
void merge(vector<PII> &segs)
{
vector<PII> res;//存放最总合并后的区间;
sort(segs.begin(),segs.end());//对原区间排序;
int ed=-2e9;//
int st=-2e9;
//遍历迭代器
for(auto seg:segs)
if(ed<seg.first)//如果两个区间没交集
{
if(st!=-2e9)//且区间不为空
res.push_back({st,ed});//确定没交集就把维护的区间存入容器;
st=seg.first;//选择下一个维护的区间
ed=seg.second;
}
else ed=max(ed,seg.second);//有交集的情况,比较区间尾部的
//for循环的管理区域包含else
if(st!=-2e9)res.push_back({st,ed});/*遍历迭代器的时候是维护的区间和迭代器本次遍历的区间进行比较而存入维护的区间,导致比较的区间没
存进容器中,需要最后设一个存进容器中*/
segs=res;
}
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
{
int l,r;
scanf("%d%d",&l,&r);
segs.push_back({l,r});
}
merge(segs);
cout<<segs.size()<<endl;
return 0;
}
题目出处:AcWing