区间合并就是将坐标轴中两个存在交集的区间合并成一个区间。
代码:
#include<bits/stdc++.h> using namespace std; const int N = 1000010; typedef pair<int,int> PII; //用来存放区间的左右端点 vector<PII>seg; int n,l,r; //合并区间操作函数 int merge(){ //存放合并完成后的区间的数组 vector<PII>res; //初始化区间的范围 int l = -2e9, r = -2e9; //枚举有交集的区间 for(auto s:seg){ //假如当前区间和枚举区间不存在交集 if(r < s.first){ //判断是否为空,若非空则插入区间到结果集 if(l != -2e9) res.push_back({l,r}); //修改当前区间的范围 l = s.first; r = s.second; }else{ //将该区间合并到当前区间中 r = max(r,s.second); } } //判断最后一个区间是否为空 if(l != -2e9) res.push_back({l,r}); return res.size(); } int main(){ cin>>n; for(int i = 0 ; i < n ;i ++ ){ //读入区间并且放入容器中 cin>>l>>r; seg.push_back({l,r}); } //预处理区间 sort(seg.begin(),seg.end()); //输出结果 cout<<merge()<<endl; return 0; }
原文地址:https://www.cnblogs.com/Flydoggie/p/12244272.html
时间: 2024-11-02 23:23:11