打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
【每周三道题】【题解】普及题:区间合并

每周三道题

『每周三道题』是计蒜客信息学推出的周更栏目。每周,在我们都会在公众号上都会发布由简到难,共三道信息学题目,并于次日公布题解。欢迎各位同学积极踊跃地参与解题哟!

题解

可以对区间按左端点从小到大排序,左端点相同按右端点从小到大排序,记下来当前遇到的最右边的点 r ,刚开始是最左边区间的右端点,然后依次看每个区间,如果这个区间的左端点比 r 大,那中间就有空的区域了,就达不到题目要求了,否则就可以接着连上去,不过如果这个区间的右端点比 r 大,那么现在遇到的最右边的点就是这个区间的右端点了,就把 r 更新成这个区间的右端点。

标程

#include <iostream>#include <algorithm>using namespace std;struct node { int a; int b;};bool cmp(node x, node y) { // 比较函数 if (x.a != y.a) { return x.a < y.a; } return x.b < y.b;}node p[50005];int main() { int n, r; bool f; cin >> n; for (int i = 0; i < n; i++) { cin >> p[i].a >> p[i].b; } sort(p, p + n, cmp); // 排序 r = p[0].b; f = true; for (int i = 1; i < n; i++) { if (p[i].a > r) { // 中间有空的区域了 f = false; break; } if (p[i].b > r) { // 更新目前遇到的最右边的点 r = p[i].b; } } if (f) { cout << p[0].a << ' ' << r << endl; // 输出答案 } else { cout << 'no' << endl; } return 0;}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
CH5104题解
编程语言树状数组小结
2022年新高考1卷22题解题逻辑
poj1328
2020ICPC 江西省大学生程序设计竞赛(A,B,E,G,H,I,K,L,M)
从零开始学贪心算法
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服