#3787. 求最长不下降序列

求最长不下降序列

题目描述

给定由 nn 个互不相同的整数组成的数列 b1,b2,,bnb_1,b_2,\ldots,b_n,请从中选出尽可能多的数,使它们保持在原数列中的先后顺序,且后一个数不小于前一个数。

也就是说,所选数的下标满足 1i1<i2<<ikn1\le i_1<i_2<\cdots<i_k\le n,对应的数满足 bi1bi2bikb_{i_1}\le b_{i_2}\le\cdots\le b_{i_k}。选出的数不要求在原数列中连续。

请输出能够选出的最大个数,以及一个满足要求的数列。

输入格式

第一行包含一个整数 nn,表示数列的长度。

第二行包含 nn 个互不相同的整数 b1,b2,,bnb_1,b_2,\ldots,b_n,相邻整数之间用空格分隔。

输出格式

第一行输出 max=,紧接着输出能够选出的最大个数,两者之间不要添加空格。

第二行按在原数列中出现的顺序,输出一个最长不下降子序列,相邻整数之间用空格分隔。

如果答案不唯一,输出任意一种即可。本题使用特殊评测。

样例

14
13 7 9 16 38 24 37 18 44 19 21 22 63 15
max=8
7 9 16 18 19 21 22 63

样例解释

数列 13,16,18,19,21,22,6313,16,18,19,21,22,63 是长度为 77 的不下降子序列,但不是最长的。样例输出给出了一个长度为 88 的不下降子序列。

数据范围与提示

  • 1n2001\le n\le 200
  • 数列中的所有整数互不相同。

来源

信息学奥赛一本通,1259:〖例9.3〗求最长不下降序列。