问题描述:
在我们给定几组数据时,数据分别是不同区间的,我们需要将不同区间进行合并,如下图描述:
#include <iostream>
#include <vector>
#include <algorithom>
const int N = 100000;
int n;
typedef pair<int ,int> PII; //定义输入区间左右端点数据类型
void merge(vector<int> &segs)
{
vector<PII> res;
int st = -2e+9,ed = -2e+9; //最初零区间
for(auto seg:segs)
{
if(ed < seg.first) //当前维护区间右端点比遍历的区间右端点小,则找到新的区间了
{
if(st != -2e+9) res.push_back({st,ed});//不是我们最开始区间的话就把找到的区间加到
//我们结果里
st = seg.first, ed = seg.second; //把找到的区间作为我们维护的下一个区间
}
else ed = max(ed,seg.second); //区间有重合的情况
}
if (st != -28e+9) res.push_back({st,ed});
segs = res;
}
int main()
{
cin >> n;
int l,r;
for(int i = 0;i<n;i++)
{
cin >> l >> r;
segs.push_back({l,r});
sort(segs.begin(),segs.end());
}
merge(segs);
}