HihoCoder1672 : 区间问题([Offer收割]编程练习赛41)(贪心)

Posted ---学习ing---

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HihoCoder1672 : 区间问题([Offer收割]编程练习赛41)(贪心)相关的知识,希望对你有一定的参考价值。

时间限制:10000ms
单点时限:1000ms
内存限制:256MB

描述

给定N个区间[Ai, Bi],请你找到包含元素最少的整数集合S,使得每个区间都至少有两个整数在S中。  

例如给定三个区间[1, 3], [1, 4], [2, 5],则S={2, 3}。

输入

第一行包含一个整数N。

以下N行每行包含两个整数Ai, Bi。  

对于30%的数据,1 ≤ N ≤ 1000  

对于100%的数据, 1 ≤ N ≤ 100000 1 ≤ Ai < Bi ≤ 1000000

输出

输出一个整数代表S的大小。

样例输入
3  
1 3 
1 4  
2 5  
样例输出
2
  • 模型:借教室。 

 

  • 手段:贪心,按第二关键词或者第一关键字(应该可以)。

 

#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn=2000010;
struct in { int a; int b; } x[maxn];
bool cmp(in x,in y) {  if(x.b==y.b) return x.a>y.a;  return x.b<y.b;}
int main()
{
    int ans=0,n,i,j,laxt=0,pre=0;
    scanf("%d",&n);
    for(i=1;i<=n;i++) scanf("%d%d",&x[i].a,&x[i].b);
    sort(x+1,x+n+1,cmp);
    for(i=1;i<=n;i++){
        if(pre>=x[i].a) continue;
        else if(laxt>=x[i].a) ans++,pre=laxt,laxt=x[i].b;
        else ans+=2,laxt=x[i].b,pre=laxt-1;
        
    }
    printf("%d\n",ans);
    return 0;
}

 

以上是关于HihoCoder1672 : 区间问题([Offer收割]编程练习赛41)(贪心)的主要内容,如果未能解决你的问题,请参考以下文章

51nod1672区间交

51nod 1672 贪心/队列

hihoCoder 1078 区间查询线段树

hihoCoder week19 RMQ问题再临-线段树 单点更新 区间查询

hihoCoder #1078 : 线段树的区间修改(线段树区间更新板子题)

hihoCoder #1320 : 压缩字符串 区间dp