一、定义
把有重合区间的多个区间合并为同一个
二、思路
1.对所有区间根据左端点进行排序。
2.维护一个区间,各个区间依次比较,合并区间,若无重合部分,找出一个合并后的区间,并将所维护的区间更新。
三、例题
#include <iostream>
#include<vector>
#include<algorithm>
using namespace std;
typedef pair<int,int> PII;
const int N=100010;
vector<PII> segs;
void merge(vector<PII> &segs)
{
vector<PII> result;//储存答案的数组
sort(segs.begin(),segs.end());//pair排序优先以first排序,再以second排序
int st=-2e9;int end=-2e9;
for(auto seg:segs)
{
if(end<seg.first)
{
if(st!=-2e9)result.push_back({st,end});
st=seg.first;
end=seg.second;
}
else end=max(end,seg.second);
}
result.push_back({st,end});
segs=result;
}
int main() {
int n;
cin>>n;
for(int i=0;i<n;i++)
{
int left;
int right;
cin>>left>>right;
segs.push_back({left,right});
}
merge(segs);
cout<<segs.size();
return 0;
}