欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

区间合并板子

发布时间:2025/4/5 编程问答 51 豆豆
生活随笔 收集整理的这篇文章主要介绍了 区间合并板子 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

按照左端点进行排序,然后根据右端点的取值来看区间是否相交。
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位技术专家共同创作,文字、视频、音频交互阅读

总结

以上是生活随笔为你收集整理的区间合并板子的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。