生活随笔
收集整理的这篇文章主要介绍了
区间合并板子
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
按照左端点进行排序,然后根据右端点的取值来看区间是否相交。
st和ed表示当前没有与之相交的区间的左端点和右端点,初始化设置为负无穷。对于正在处理的区间,如果ed小于当前的左端点,说明没有交集,可以把该当前的{st,ed}放入结果vector中。如果ed大于等于当前区间的左端点,说明有交集,此时ed取区间的右端点和ed之间的最大值。
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
const int maxn=1e5+10;
typedef pair<int,int> PII;//
int n;
vector<PII> segs;void merge(vector<PII> &segs){vector<PII> res;//合并之后的结果sort(segs.begin(),segs.end());int st=-2e9,ed=-2e9;//边界是负无穷for(auto seg:segs){if(ed<seg.first){//没有交集if(ed!=-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;
}int main(){cin>>n;for(int i=0;i<n;i++){int l,r;cin>>l>>r;//左右端点segs.push_back({l,r});//放到vector里面}merge(segs);//合并cout<<segs.size()<<endl;/* for(auto seg:segs){cout<<seg.first<<" "<<seg.second<<endl;}*/return 0;}
《新程序员》:云原生和全面数字化实践50位技术专家共同创作,文字、视频、音频交互阅读
总结
以上是生活随笔为你收集整理的区间合并板子的全部内容,希望文章能够帮你解决所遇到的问题。
如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。