题目描述
给定数组arr,设长度为n,输出arr的最长递增子序列。(如果有多个答案,请输出其中字典序最小的)
输入描述:
输出两行,第一行包括一个正整数n(n<=100000),代表数组长度。第二行包括n个整数,代表数组arr \left(1 \leq arr_i \leq 1e9 \right)(1≤arri≤1e9)。
输出描述:
输出一行。代表你求出的最长的递增子序列。
示例1
输入
复制
9 2 1 5 3 6 4 8 9 7
输出
复制
1 3 4 8 9
示例2
输入
复制
5 1 2 8 6 4
输出
复制
1 2 4
说明
其最长递增子序列有3个,(1,2,8)、(1,2,6)、(1,2,4)其中第三个字典序最小,故答案为(1,2,4)
最原始的最长递增子序列问题只需要求出最长递增子序列的长度即可,为了能够打印出整个递增子序列,需要额外加一个数组保存序列中的前一个节点。以这个数组为例:
7,1,8,2,9,10,3,1,11
字典序最小的最长递增子序列为:1,2,9,10,11。
首先是传统的O(n.^2)复杂度的解法,dp[i]表示以下标i结尾的最长递增子序列的