• P2434 [SDOI2005]区间


    P2434 [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
    模拟、
     1 #include<cstdio>
     2 #include<algorithm>
     3 using namespace std;
     4 
     5 struct qujian{
     6     int l,r;
     7     bool operator < (const qujian x) const 
     8     {
     9         return l < x.l;
    10     }
    11 }q[100010];
    12 int n,nowl,nowr;
    13 
    14 int main()
    15 {
    16     scanf("%d",&n);
    17     for (int i=1; i<=n; ++i)
    18     {
    19         scanf("%d%d",&q[i].l,&q[i].r);
    20     }
    21     sort(q+1,q+n+1);
    22     nowl = q[1].l;
    23     nowr = q[1].r;
    24     for (int i=2; i<=n; ++i)
    25     {
    26         if(q[i].l <= nowr)
    27         {
    28             nowr = max(nowr,q[i].r);
    29         }
    30         else 
    31         {
    32             printf("%d %d
    ",nowl,nowr);
    33             nowl = q[i].l;
    34             nowr = q[i].r;
    35         }
    36     }
    37     printf("%d %d
    ",nowl,nowr);
    38     return 0;
    39 }
  • 相关阅读:
    QTdebug时没有调试引擎
    快速排序
    MFC之动态创建按钮
    Linux 本人常用到的基本命令
    history 查看历史操作记录在shell脚本执行中无法显示问题
    C#基础学习5
    C#基础学习4
    C#基础学习3
    C#基础学习1
    C#基础学习2
  • 原文地址:https://www.cnblogs.com/mjtcn/p/6914456.html
Copyright © 2020-2023  润新知