E. Third-Party Software - 2

time limit per test

2.0 s

memory limit per test

256 MB

input

standard input

output

standard output

Pavel is developing another game. To do that, he again needs functions available in a third-party library too famous to be called. There are m

functions numbered from 1 to m, and it is known that the i-th version of the library contains functions from ai to bi

inclusively.

The library is not free and Pavel needs all the functions. What minimal number of versions does he need to purchase to be able to use all the functions?

Input

The first line contains two integers n

and m (1≤n≤200000,1≤m≤109

) — the number of library versions and the number of functions.

Each of the next n

lines contains two integers ai and bi (1≤ai≤bi≤m) — the interval of function numbers available in the i

-th version.

Output

In the first line output «YES» or «NO», depending on if it's possible or not to purchase library versions to use all the functions.

In case of the positive answer output two more lines. In the second line output a single integer k

— the minimal number of library versions needed to be purchased. In the third line output k

distinct integers — the numbers of versions needed to be purchased.

If there are several possible answers, output any of them.

Examples
Input

Copy
4 8
1 2
3 4
5 6
7 8
Output

Copy
YES
4
1 2 3 4
Input

Copy
4 8
1 5
2 7
3 4
6 8
Output

Copy
YES
2
1 4
Input

Copy
3 8
1 3
4 5
6 7
Output

Copy
NO

题意:翻译一段资料需要m个信息,信息分布在n本字典上,问这n本字典能否提供m个信息去翻译资料,若能得话,最少需要基本字典,并输出字典的序号

题解:
题解:首先按照左端点从小到大排序,左端点相同按照右端点从大到小排序。然后贪心选取,将设当前能到达的最远点为now,我们需要在左端点<=now+1的线段中选取右端点最大的放进去,之后更新now。
其他不满足的情况特判即可。
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
vector<int>q;
struct node
{
int l;
int r;
int id;
}p[];
bool cmp(node a,node b)
{
if(a.l!=b.l)
return a.l<b.l;
else
return a.r>b.r;
}
int main()
{
int n,m,flag=;
cin>>n>>m;
for(int i=;i<=n;i++)
{
cin>>p[i].l>>p[i].r;
p[i].id=i;
}
sort(p+,p++n,cmp);
if(p[].l!=)
cout<<"NO"<<endl; else
{
q.push_back(p[].id);
int now=p[].r;
for(int i=;i<=n;)
{
if(p[i].l>now+)
{
cout<<"NO"<<endl;
flag=;
break;
}
else
{
int temp=now,pos=p[i].id;
while(i<=n&&p[i].l<=now+)
{
if(p[i].r>temp)
{
temp=p[i].r;
pos=p[i].id;
}
i++;
}
if(now==temp)
continue;
now=temp;
q.push_back(pos);
}
}
if(now<m&&flag==)
cout<<"NO"<<endl;
else if(flag==)
{
cout<<"YES"<<endl;
cout<<q.size()<<endl;
for(int i=;i<q.size();i++)
cout<<q[i]<<' ';
cout<<endl;
} }
return ;
}

E. Third-Party Software - 2 贪心----最小区间覆盖的更多相关文章

  1. UVa 10020 (最小区间覆盖) Minimal coverage

    题意: 数轴上有n个闭区间[ai, bi],选择尽量少的区间覆盖一条指定线段[0, m] 算法: [start, end]为已经覆盖到的区间 这是一道贪心 把各个区间先按照左端点从小到大排序,更新st ...

  2. 贪心算法----区间覆盖问题(POJ2376)

    题目: 题目的大概意思是约翰这个农民有N条牛,这些牛可以在一天中的某个时间段可以进行工作,他想把这个时间段分成若干个片段让这些牛去进行打扫任务,你的任务是安排尽量少的牛然后可以完成分成这些片段的打扫任 ...

  3. POJ 2376 Cleaning Shifts (贪心,区间覆盖)

    题意:给定1-m的区间,然后给定n个小区间,用最少的小区间去覆盖1-m的区间,覆盖不了,输出-1. 析:一看就知道是贪心算法的区间覆盖,主要贪心策略是把左端点排序,如果左端点大于1无解,然后, 忽略小 ...

  4. UVA10020:Minimal coverage(最小区间覆盖)

    题目: http://acm.hust.edu.cn/vjudge/contest/view.action?cid=68990#problem/M 题目需求:数轴上有n个闭区间[ai,bi],选择尽量 ...

  5. UVA10020(最小区间覆盖)

    题意:       给你一个区间[0,m]和一些小的区间[l,r]让你选择最少的小区间个数去把整个区间覆盖起来. 思路:       算是比较经典的贪心题目吧(经典于难度没什么对应关系),大体思路可以 ...

  6. NYOJ 12:喷水装置(二)(贪心,区间覆盖问题)

    12-喷水装置(二) 内存限制:64MB 时间限制:3000ms 特判: No 通过数:28 提交数:109 难度:4 题目描述: 有一块草坪,横向长w,纵向长为h,在它的橫向中心线上不同位置处装有n ...

  7. POJ - 2376 Cleaning Shifts 贪心(最小区间覆盖)

    Cleaning Shifts Farmer John is assigning some of his N (1 <= N <= 25,000) cows to do some clea ...

  8. 高效算法——D 贪心,区间覆盖问题

    Given several segments of line (int the X axis) with coordinates [Li , Ri ]. You are to choose the m ...

  9. poj 2376 Cleaning Shifts 最小区间覆盖

    Cleaning Shifts Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 40751   Accepted: 9871 ...

随机推荐

  1. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 表单:表单帮助文本

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  2. java中的 RSA加密

    package com.cn.test.rsa; import java.math.BigInteger; import java.security.KeyFactory; import java.s ...

  3. Codeforces 598D:Igor In the Museum

    D. Igor In the Museum time limit per test 1 second memory limit per test 256 megabytes input standar ...

  4. 「Luogu P3820 小D的地下温泉」

    这道题的考点比较多. 前置芝士 BFS(DFS),这两种算法在这道题中并没有什么特别突出的地方,基本就是自己看心情写(本文以DFS为准,所以我心情是好是坏呢?) 连通块,可以将每一个温泉看作一个连通块 ...

  5. Oracle建表时主键自增

    1.创建表 /*第一步:创建表格*/ create table t_user( id int primary key, --主键,自增长 username ), password ), type ) ...

  6. P3381 【模板】最小费用最大流(spfa板子)

    #include<bits/stdc++.h> using namespace std; #define lowbit(x) ((x)&(-x)) typedef long lon ...

  7. wx.previewimage预览返回会触发onshow的处理方法

    最近做详情页,添加图片预览后竟然触发onshow的处理方法.就显得很尴尬.框架用的uni-app 解决方法 1.page外全局定义开关变量 var a; export default { } 2 .o ...

  8. MAC 终端编辑完成后如何保存:

    如果是vi,则:Esc 退出编辑模式,输入以下命令: :wq 保存后退出vi,若为 :wq! 则为强制储存后退出(常用):w 保存但不退出(常用):w! 若文件属性为『只读』时,强制写入该档案:q 离 ...

  9. Python测试进阶——(4)Python程序监控、存储、分析并可视化CPU和内存利用率

    monitor190617.py 监控cpu和内存利用率信息,组织成json格式,并写入到 record.txt 文件中: import psutil import time import json ...

  10. C++面试常见问题——12虚函数

    虚函数 虚函数的工作原理 虚函数的实现要求对象携带额外的信息,这些信息用于确定运行时调用哪一个虚函数,这一信息具有一种被称为虚函数表指针(vptr)的指针形式.vptr指向一个被称为虚函数表(vtbl ...