区间合并
作者:
自由基
,
2021-08-05 20:08:38
,
所有人可见
,
阅读 280
// 将所有存在交集的区间合并
void merge(vector<PII> &segs)
{
// res 存储所有已经没有交集的区间
vector<PII> res;
// 所有区间按照左端点排序
sort(segs.begin(), segs.end());
// st用于维护左端点,ed用于维护右端点
int st = -2e9, ed = -2e9;
// 维护当前区间
for (auto seg : segs)
// 若当前区间右端点小于下一个区间的左端点(出现不可合并的区间),则将当前区间加入到res,更新st,ed
if (ed < seg.first)
{
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;
}