[复合] 最长递增子 – LIQ

线程和测试: 链接

对于整数范围包含N个元件A[1], 该[2], … 该[ñ].
明知是单调递增子 1 这里[I1],… 该[我] 满意的
I1 < I2 < … < 我弗吉尼亚州[I1] < 该[I2] < .. < 该[我]. 序列最长的请注明单调递增子有多少元素?
下载测试VA解决方案 (C / C , 帕斯卡尔) 这里.
输入
当前 1 含 1 整数N个 (1 ≤N≤ 1000).
第一线 2 包含N个整数A[1], 该[2], .. 该[ñ] (1 ≤一[在] ≤ 10000).
产量
记录单调递增序列最长的长度.

输入:
6
1 2 5 4 6 2
产量:
4
说明测试的例子: 是最长的子系列A[1] = 1 < 该[2] = 2 < 该[4] = 4 < 该[5] = 6, 这是序列长度 4.

首次使用 1 数组b来标记在位置b的序列长度的增加[在] 任何. 可变长度最大标记的最长递增序列. 最初b[在] = 1 对于所有的i, 最大= 1.
浏览射程 1 环.
虽然浏览, 在第一行中,我们向后浏览每个元素. 若b[在] <= B[Ĵ] 和[在] > 该[Ĵ] 和b[在] <=最大,然后我们增加b[在] 向上= B[Ĵ] + 1; 检查并重新分配最大.
首席执行官:
开始
该[] : 1 2 5 4 6 2
B[] : 1 1 1 1 1 1

修订 1: (I = 1)
该[1] = 2. 从浏览[0] 约[0].
我们见B[1] <= B[0] 和[1] > 该[0] 和b[1] <=最大值=> B[1] = B[0] + 1 = 2, 最大= B[1] = 2.
修订 2: (I = 2)
该[2] = 5. 从浏览[1] 约[0].
+/ 考虑[1], 我们见B[2] <= B[1] 和[2] > 该[1] 和b[2] <=最大值=> B[2] = B[1] + 1 = 3, 最大= B[2] = 3.
+/ 考虑[0], B[2] = 3 > B[0] => 什么都不做.
修订 3: (I = 3)
该[3] = 4. 从浏览[2] 约[0].
+/ 考虑[2], 我们见B[3] <= B[2] 但[3] < 该[2] => 什么都不做
+/ 考虑[1], 我们见B[3] <= B[1] 和[3] > 该[1] 和b[3] <=最大值=> B[3] = B[1] + 1 = 3, 最大改变.
+/ 考虑[0], B[3] = 3 > B[0] => 什么都不做.
修订 4: (i = 4的)
该[4] = 6. 从浏览[3] 约[0].
+/ 考虑[3], 我们见B[4] <= B[3] 和[4] > 该[3] 和b[4] <=最大值=> B[4] = B[3] + 1 = 4, 最大= B[4] = 4.
+/ 考虑[2], 我们见B[4] = 4 > B[2] => 什么都不做.
+/ 考虑[1], 我们见B[4] = 4 > B[1] => 什么都不做.
+/ 考虑[0], 我们见B[4] = 4 > B[0] => 什么都不做.
修订 5: (I = 5)
该[5] = 2. 从浏览[4] 约[0].
+/ 考虑[4], 我们见B[5] <= B[4] 但[5] < 该[4] => 什么都不做
+/ 该[3], 该[2], 该[1] 类似
+/ 考虑[0], 我们见B[5] <= B[0] 和[5] > 该[0] 和b[5] <=最大值=> B[5] = B[0] + 1 = 2, 最大改变.
因此,我们有:
该[] : 1 2 5 4 6 2
B[] : 1 2 3 3 4 2
最大= 4.