zoukankan      html  css  js  c++  java
  • 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<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<cmath>
     5 #include<algorithm>
     6 using namespace std;
     7 const int MAXN=50001;
     8 struct node
     9 {
    10     int bg,ed;
    11 }a[MAXN];
    12 int n;
    13 int comp(const node & a,const node & b)
    14 {
    15     return a.bg<b.bg;
    16 }
    17 int main()
    18 {
    19     ios::sync_with_stdio(false);
    20     cin>>n;
    21     for(int i=1;i<=n;i++)
    22         cin>>a[i].bg>>a[i].ed;
    23     sort(a+1,a+n+1,comp);
    24     int l=a[1].bg;
    25     int r=a[1].ed;
    26     int now=1;
    27     while(now++&&now<=n)
    28     {
    29         if(a[now].bg>r)
    30         {
    31             printf("%d %d
    ",l,r);
    32             l=a[now].bg;
    33             r=a[now].ed;
    34         }
    35         r=max(a[now].ed,r);
    36     }
    37     printf("%d %d
    ",l,r);
    38     return 0;
    39 }
  • 相关阅读:
    技术服务支持
    如何将Java Web项目部署到服务器上
    移动端前端开发——微信左上角返回按钮(JQMobile)
    Mac下phpstorm 浏览器出现 502 bad gateway 解决办法
    mysql sql语句大全
    复制自己的ssh-key
    PhpStorm环境搭建
    max下搭建XAMPP
    Cocopods第三方库管理工具创建Swift项目&OC项目就
    Swift-闭包
  • 原文地址:https://www.cnblogs.com/zwfymqz/p/7074223.html
Copyright © 2011-2022 走看看