题库练习 神秘的礼物
← 上一题 下一题 →

A7008 | 神秘的礼物

时间限制1s
内存限制128MB
通过 / 提交0/0

题目描述

Peter 决定给他住在澳大利亚的朋友写一张生日贺卡。为了让这份礼物显得更加神秘,他决定用一系列的信封制作一个“信封套娃链”。

这里的“链”是指一个信封序列 $A = \{a_1, a_2, \dots, a_k\}$,其中第 $i$ 个信封的宽度和高度必须**严格大于**第 $i-1$ 个信封的宽度和高度。序列的长度即为链中信封的个数。

Peter 想要从他拥有的信封中选出一些,组成一个长度最大的链。同时,这个链必须能够装下他准备的卡片。卡片能装入链中的条件是:卡片的宽度和高度必须**严格小于**链中最小信封(即 $a_1$)的宽度和高度。

**注意:** 信封和卡片都**不能旋转**。

Peter 有很多信封但时间紧迫,于是他把这个艰巨的任务交给了你。请你计算出满足条件的最长信封链的长度,并输出具体的信封编号序列。

输入格式

第一行包含三个整数 $n, w, h$ ($1 \le n \le 5000$, $1 \le w, h \le 10^6$),分别表示 Peter 拥有的信封数量、卡片的宽度和高度。

接下来的 $n$ 行,每行包含两个整数 $w_i$ 和 $h_i$ ($1 \le w_i, h_i \le 10^6$),表示第 $i$ 个信封的宽度和高度。

输出格式

第一行输出一个整数,表示最长信封链的长度。

第二行输出组成该链的信封编号(按从小到大的顺序,即从最里面的信封到最外面的信封),编号之间用空格分隔。

如果存在多个长度最大的方案,输出任意一个即可。
如果没有任何信封能装下卡片,则在第一行输出 0

输入输出样例

输入 #1
2 1 1
2 2
2 2
输出 #1
1
1
输入 #2
3 3 3
5 4
12 11
9 8
输出 #2
3
1 3 2
C++ 编辑器
输入
输出