题目描述

现给定n个闭区间[ai, bi],1<=i<=n。这些区间的并可以表示为一些不相交的闭区间的并。你的任务就是在这些表示方式中找出包含最少区间的方案。你的输出应该按照区间的升序排列。这里如果说两个区间[a, b]和[c, d]是按照升序排列的,那么我们有a<=b<c<=d。

请写一个程序:

读入这些区间;

计算满足给定条件的不相交闭区间;

把这些区间按照升序输出。

输入输出格式

输入格式:

第一行包含一个整数n,3<=n<=50000,为区间的数目。以下n行为对区间的描述,第i行为对第i个区间的描述,为两个整数1<=ai<bi<=1000000,表示一个区间[ai, bi]。

输出格式:

输出计算出来的不相交的区间。每一行都是对一个区间的描述,包括两个用空格分开的整数,为区间的上下界。你应该把区间按照升序排序。

输入输出样例

输入样例#1: 复制

5
5 6
1 4
10 10
6 9
8 10

输出样例#1: 复制

1 4
5 10

思路:一开始看到题目,还以为是用线段树(毕竟省选题),但仔细想了想,用线段树的话好像很麻烦,要维护不少信息呢,况且数据范围:1<=ai<bi<=1000000,显然nlogn的算法无法承受。那么用什么做法呢?我们可以发现:n比较小只有5万,那么我们可以考虑枚举区间。其实,这题有一个类似于贪心的算法,先按照左端点从小到大排序,然后我们把区间看成是线段,如果两条线段有交集,那么我们可以视为把这两条线段合成为一条,显然,新线段的右端点即为两条线段中右端点较靠右的那一个。如果线段没有交集,那么我们直接输出上一条线段的答案。这题这么水实在不像是省选原题啊233。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
using namespace std;
const int maxn=5e4+5;
int read()
{int ret=0,f=1;char c=getchar();while(c<'0'||c>'9'){if(c=='-') f=-1;c=getchar();}while(c>='0'&&c<='9'){ret=ret*10+c-'0';c=getchar();}return ret*f;
}
int n;
struct line{int l,r;
}e[maxn];
bool cmp(line A,line B)
{return A.l<B.l;
}
int main()
{n=read();for(int i=1;i<=n;i++){e[i].l=read(),e[i].r=read();}sort(e+1,e+1+n,cmp);int ll=e[1].l,rr=e[1].r;for(int i=2;i<=n;i++){if(e[i].l<=rr) rr=max(rr,e[i].r);else{printf("%d %d\n",ll,rr);ll=e[i].l,rr=e[i].r;}}printf("%d %d\n",ll,rr);return 0;
}

 

转载于:https://www.cnblogs.com/loi-frank/p/7725808.html

SDOI2005 区间相关推荐

  1. 洛谷--橙色百道DP总结

    最近刷完了洛谷橙色DP大约一百道,算是发现了一些套路,就部分题目做一些总结. 大概分为三类 第一类,九大背包及其衍生 第二类,经典DP模型,如LCS,LIS等 第三类,实际问题背景的普通,环形,树上D ...

  2. Redis 笔记(04)— list类型(作为消息队列使用、在列表头部添加元素、尾部删除元素、查看列表长度、遍历指定列表区间元素、获取指定区间列表元素、阻塞式获取列表元素)

    Redis 的列表是链表而不是数组.这意味着 list 的插入和删除操作非常快,时间复杂度为 O(1),但是索引定位很慢,时间复杂度为 O(n). 当列表弹出了最后一个元素之后,该数据结构自动被删除, ...

  3. LeetCode简单题之汇总区间

    题目 给定一个 无重复元素 的 有序 整数数组 nums . 返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 .也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范 ...

  4. FhqTreap的区间翻转

    学 Fhq 就是为了尽量不去写某毒瘤数据结构,所以自然要来杠一杠某数据结构的经典操作:区间反转 听起来玄乎,但只需要一个小 trick 就行了:把原来的区间以下标作为权值建成 Treap , 这样整棵 ...

  5. 【基本操作】主席数统计区间不同颜色个数

    例题:询问 $n$ 个数中无修改的区间不同数个数,不带修改(SPOJ的一道题). 方法1:直接删 我们尝试头铁地开正常的下标主席树! 依次插入 $n$ 个数,插入第 $i$ 个数时,我们只要在把第 $ ...

  6. 【题解】BZOJ 3065: 带插入区间K小值——替罪羊树套线段树

    题目传送门 题解 orz vfk的题解 3065: 带插入区间K小值 系列题解 一 二 三 四 惨 一开始用了一种空间常数很大的方法,每次重构的时候merge两颗线段树,然后无限RE(其实是MLE). ...

  7. hdu 2665(主席树查询区间k大值)

    先贴我自己写的代码做模板虽然跟原博主没什么两样.(一开始空间开的4*maxn,交到hdu上一直TLE很奇怪) #include<bits/stdc++.h> using namespace ...

  8. mysql 数字区间_币投君0904丨数字货币暴跌原因何在

    昨日数字货币再次集体闪崩,btc甚至刺穿10000大关,合约帝数据显示,过去 24 小时全网爆仓超过 10 亿美元,共有 6.7 万人成为爆仓受害者.究其原因主要有两个方面:一方面是昨晚美股暴跌,三大 ...

  9. Awcing算法---区间合并

    #include <iostream> #include <algorithm> #include <vector> using namespace std; ty ...

最新文章

  1. mysql主从复制篇-主库有数据
  2. pip install 报错:Versioning for this project requires either an sdist tarball, ...
  3. 无线持续攻击(wireless duration attack)
  4. python 逐行调试工具_在线编译或编辑Python的5个最佳工具
  5. 【maven插件】flatten-maven-plugin : 处理版本占位符
  6. 计算机一级办公软件选择题,计算机一级MSOffice习题
  7. 排序千万级数据_从千万级房产成交量排名,窥探中国城市的真实家底
  8. Vmware虚拟机的安装和使用
  9. 从芯片到 AI,52 岁英特尔的蜕变!
  10. A*寻路算法的探寻与改良(一)
  11. 第六届中国云计算大会详细日程
  12. 我所认为的KVC和KVO
  13. java 数据类型 面试题_Java数据类型面试题目
  14. 京东支付逻辑存在不安全因素
  15. 用SET工具包制作钓鱼网站
  16. 推荐几个做自媒体好用的电影素材网站
  17. 清华 计算机系 赵晟,来看看2010年清华大学自动化系录取名单本科毕业学校
  18. 怎么把电脑上的准考证发送到手机上呢
  19. 帮百度AI干脏活累活的公司,都死了
  20. LINUX 学习方法 (兄弟连)

热门文章

  1. 使用OpenCV,Keras和Tensorflow构建Covid19掩模检测器
  2. python做作业没头绪_使用Python做作业
  3. nlp算法文本向量化_NLP中的标记化算法概述
  4. Linux Qt使用POSIX多线程条件变量、互斥锁(量)
  5. 存款全线下降,贷款大幅增加,你敢等吗?
  6. 银行停贷、涨息、排队,8月不贷只能等明年
  7. Chapter 5:Spectral-Subtractive Algorithms
  8. 信用卡多还钱了怎么办?
  9. “天下第一长联”与“元跨革囊”
  10. SPI-Flash页写实验