当前位置: 首页 > news >正文

[SDOI2005]区间

题目描述

现给定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

法一:
按左端点排序后,记录当前区间[L,R]
如果新的区间的l<=R,说明新的区间可以合并,更新R
如果新的区间l>R,说明新的区间不能跟当前区间合并,又因为已经按左端点拍了序,所以输出当前区间
#include<cstdio>
#include<algorithm>
using namespace std;
struct node
{
    int l,r;
}e[50001];
int a[1000001];
bool cmp(node p,node q)
{
    return p.l<q.l;
}
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;i++) scanf("%d%d",&e[i].l,&e[i].r);
    sort(e+1,e+n+1,cmp);
    int L=e[1].l,R=e[1].r;
    for(int i=2;i<=n;i++)
    {
        if(e[i].l<=R) R=max(e[i].r,R);
        else 
        {
             printf("%d %d\n",L,R); 
            L=e[i].l;
            R=e[i].r;
        }
    }
    printf("%d %d",L,R);
}
View Code

 

    法二:

    差分思想,左端点+1,右端点-1

    变量now记录前缀和

   枚举位置,

    如果now由0变为正数,记为当前位置为区间左端点

   如果now由正数变0,记录当前位置为区间右端点,输出

  

   注:不是now由0变1,因为可能几个区间左端点相同

 
   
#include<cstdio>
#include<algorithm>
using namespace std;
int a[50001],maxn,minn=2e9;
int main()
{
    int n;
    scanf("%d",&n);
    int x,y;
    for(int i=1;i<=n;i++) 
    {
        scanf("%d%d",&x,&y);
        a[x]++; a[y]--;
        maxn=max(maxn,y);
        minn=min(minn,x);
    }
    int last,now=0;
    for(int i=minn;i<=maxn;i++)
    {
        now+=a[i];
        if(a[i] && now==a[i]) last=i;
        if(!now && a[i])
        {
            printf("%d %d\n",last,i);
            now=0;
        }
    }
}
View Code
 
   

 

 
  

转载于:https://www.cnblogs.com/TheRoadToTheGold/p/7486102.html

相关文章:

  • [C++]拼图游戏
  • Servicehot:高效数据中心运维团队有哪7个习惯
  • 2009年的SCI期刊JCR出来了
  • 如何使用Docker构建运行时间较长的脚本
  • cheminfo.gov.cn css 样式示例学习
  • 云服务器ECS资源查询的正确姿势
  • 事与人
  • 校园网配置Vmware的网络模式,便于Xshell和notepad的连接
  • 2015年云计算或将成为企业主流应用
  • MagicDraw UML 16.8 安装教程(2)-破解补丁
  • 使用Docker镜像构建RPM包
  • oracle存储过程例子及其他语句[1]
  • 把问题描述清楚是解决问题的起点
  • jquery:利用jsonp跨域访问--转载
  • async await
  • CentOS7简单部署NFS
  • express如何解决request entity too large问题
  • k个最大的数及变种小结
  • oldjun 检测网站的经验
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • Python 基础起步 (十) 什么叫函数?
  • Python学习之路13-记分
  • Vue小说阅读器(仿追书神器)
  • vue总结
  • 前端相关框架总和
  • 山寨一个 Promise
  • elasticsearch-head插件安装
  • ionic异常记录
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • 湖北分布式智能数据采集方法有哪些?
  • $NOIp2018$劝退记
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (4)(4.6) Triducer
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • .gitattributes 文件
  • .mysql secret在哪_MySQL如何使用索引
  • .NET 解决重复提交问题
  • .net6+aspose.words导出word并转pdf
  • @cacheable 是否缓存成功_Spring Cache缓存注解
  • [20160902]rm -rf的惨案.txt
  • [BUUCTF]-PWN:[极客大挑战 2019]Not Bad解析
  • [C++提高编程](三):STL初识
  • [HUBUCTF 2022 新生赛]
  • [IM] [Webhook] Webhook实现IM平台机器人
  • [iOS]如何删除工程里面用cocoapods导入的第三方库
  • [Java][Android][Process] 暴力的服务能够解决一切,暴力的方式运行命令行语句
  • [Linux] 进程间通信基础
  • [NOIP2005]过河
  • [office] Excel自带的编辑函数求和方法 #其他#媒体
  • [RK-Linux] Linux A/B System详解