#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<climits>
#include<queue>
#include<map>
#include<set>
#include<sstream>
#include<cassert>
#include<bitset>
#include<list>
#include<unordered_map>
#define ios std::ios::sync_with_stdio(false),std::cin.tie(0),std::cout.tie(0)
using namespace std;
#define ff first
#define ss second
// #define lowbit(x) (x&-x)
#define pf(a) printf("%d\n",a)
#define mem(x,y) memset(x,y,sizeof(x))
#define dbg(x) cout << #x << " = " << x << endl
#define rep(i,l,r) for(int i = l; i <= r; i++)
#define fep(i,a,b) for(int i=b; i>=a; --i)
typedef long long ll;
const int N=2e5+100;
vector<int> v;
int n, m;
struct Node{
int l, r;
int id;
}f[N];
bool cmp(Node a, Node b)
{
if(a.l != b.l) return a.l < b.l;
return a.r > b.r;
}
void solve()
{
cin >> n >> m;
for (int i = 1; i <= n; i++) {
cin >> f[i].l >> f[i].r;
f[i].id = i;
}
sort(f+1, f+1+n, cmp);
if(f[1].l != 1) {
cout << "NO";
return ;
}
int now = f[1].r;
v.push_back(f[1].id);
bool flag = true;
for (int i = 2; i <= n; )
{
if(f[i].l > now+1) {
flag = false;
break;
}
else{
int tmp = now, pos = f[i].id;
while(i<=n && f[i].l <= now+1){
if(f[i].r > now) {
tmp = f[i].r;
pos = f[i].id;
}
i++;
}
if(now == tmp) continue;
now = tmp;
v.push_back(pos);
}
}
if(flag==true && (m == now)) {
cout << "YES\n";
cout << v.size() << endl;
for (int x : v) cout << x << " ";
}
else cout << "NO";
}
int main()
{
ios; // 开启同步
solve();
return 0;
}
Third-Party Software - 2(贪心+最小覆盖问题)
最新推荐文章于 2022-03-04 23:44:33 发布