CF4D Mysterious Present

题目描述

彼得决定给他在澳大利亚的朋友送上生日祝福,并寄送一张卡片。为了让他的礼物更加神秘,他决定制作一条链。这里的链是一个信封的序列 $A = \{ a_1, a_2, ..., a_n \}$,其中第 $i$ 个信封的宽度和高度都严格大于第 $i-1$ 个信封的宽度和高度。链的大小是链中信封的数量。 彼得想从他拥有的信封中制作出最大尺寸的链(可以不按照原序列的顺序),这个链应该使得他能够将卡片放入其中。如果卡片的宽度和高度都小于链中最小信封的宽度和高度,那么卡片可以放入链中。信封和卡片不能旋转。 彼得拥有很多信封,但时间很少,因此这项艰巨的任务被交给了你。

输入格式

第一行包含整数 $n$, $w$, $h$ ($1 \leq n \leq 5000$,$1 \leq w, h \leq 10^6$)——彼得拥有的信封数量,以及卡片的宽度和高度。接下来的 $n$ 行,每行包含两个整数 $w_i$ 和 $h_i$ ——第 $i$ 个信封的宽度和高度($1 \leq w_i, h_i \leq 10^6$)。

输出格式

在第一行输出最大链的大小。第二行输出组成所需链的信封编号(按从最小信封开始的顺序输出,用空格隔开)。请记住,卡片应该能够放入最小信封中。如果最大链的大小不唯一,输出任意一个答案。 如果卡片不能放入任何一个信封,输出单行数字 $0$。 Translated by ChatGPT 5 Thinking.