zoukankan      html  css  js  c++  java
  • poj 1089 Intervals

    /*

     

    题目:

    下列区间可以在数轴上分成最少多少个区间块

     

    分析:

    这题主要是贪心的做法,对输入的区间按照左边的值进行排序后,然后开始向后枚举每个后面的区

    间的前边的值是否小于等于起初的最大能到右面的最大值,符合的话,在更新一下起初的能到达右

    面的最大距离,比如 2-5 4-8的话,由于第一个的右值为5,而枚举到第二个区间时,4<5,而8比5大,

    所以又可以到达8,更新一下,具体看代码

     

    */

    #include <iostream>

    #include <algorithm>

    #include <cstdio>

    #include <cstring>

    using namespace std;

    #define X 50002

    struct node

    {

      int x,y;

      friend bool operator <(node a,node b)//重载符号,排序时使用

      {

        if(a.x==b.x)

        return a.y<b.y;

        return a.x<b.x;

      }

    }p[X];

    int main()

    {

      freopen("sum.in","r",stdin);

      freopen("sum.out","w",stdout);

      int n;

      while(cin>>n)

      {

        for(int i=0;i<n;i++)

        scanf("%d%d",&p[i].x,&p[i].y);

        sort(p,p+n);

        int temp = p[0].y,pre = p[0].x;//右最大值,左起始值

        for(int i=1;i<n;i++)

        {

          if(p[i].x<=temp)//枚举到的区间左值能够被前面的右最大值覆盖到的话,更新右最大值

          temp = max(temp,p[i].y);

          else//否则的话,输出并且更新起始值和右最大值

          {

            printf("%d %d\n",pre,temp);

            temp = p[i].y;

            pre = p[i].x;

          }

        }

        printf("%d %d\n",pre,temp);

      }

      return 0;

    }

     

  • 相关阅读:
    C#Web网站的创建
    C#Repeater控件的使用
    C#LINQ
    C#异常处理
    C#LINQ
    C#匿名委托,匿名函数,lambda表达式
    C#chart图表的应用
    C#用户控件的使用
    用 Python写 daemon
    CentOS 5.4 制作 Python 2.6 RPM 包的方法
  • 原文地址:https://www.cnblogs.com/yejinru/p/2434804.html
Copyright © 2011-2022 走看看