P2434 [SDOI2005]区间 [区间并问题]贪心

https://www.luogu.com.cn/problem/P2434
贪心,区间并问题
黄色题
思路:
先把所有区间按起点排序,然后将最左边的区间的两端设为答案区间的两端。接下来顺次查找剩下的区间,如果 答案区间 的右端小于当前查找到的区间的左端,输出区间,并将区间的左右值替换为当前查找区间的左右值。否则,更新答案区间右端 虽然是模板贪心,还是有几点需要强调的: 1.答案区间加粗,是因为这里不能设为上一个区间右端(亲测爆0)。 2.更新答案区间最右端,不要直接更新,而是要取一个最大值(二次爆0)。 3.最后的最后,在退出查找前,输出一次区间左右端(WA1个点)。 12点有时候可以实测,3点想必刷扫描/查找题的都应该有感触吧。。。

#include<iostream> #include<algorithm> using namespace std; int n,st,ov; struct node //结构体存区间 { int lo,hi; }a[50000+10]; bool cmp(node a,node b) //排序 { return a.lo<b.lo; } int main() { cin>>n; for(int i=1;i<=n;i++) cin>>a[i].lo>>a[i].hi; sort(a+1,a+n+1,cmp); st=a[1].lo; ov=a[1].hi; //答案区间初始化 for(int i=2;i<=n;i++) { if(a[i].lo>ov) //开新区间 { cout<<st<<" "<<ov<<endl; st=a[i].lo; ov=max(ov,a[i].hi); } else ov=max(ov,a[i].hi); //扩展原有区间 if(i==n) cout<<st<<" "<<ov<<endl; //注意点3 } return 0; }

 


__EOF__

本文作者灰の魔女伊蕾娜
本文链接https://www.cnblogs.com/2elaina/p/16570904.html
关于博主:编程小萌新一名,希望从今天开始慢慢提高,一步步走向技术的高峰!
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   -イレイナ  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示