一个数的序列 bi
,当 b1<b2<…<bS
的时候,我们称这个序列是上升的。
对于给定的一个序列 (a1,a2,…,aN)
,我们可以得到一些上升的子序列 (ai1,ai2,…,aiK)
,这里 1≤i1<i2<…<iK≤N
。
比如,对于序列 (1,7,3,5,9,4,8)
,有它的一些上升子序列,如 (1,7),(3,4,8)
等等。
这些子序列中最长的长度是 4
,比如子序列 (1,3,5,8)
。
你的任务,就是对于给定的序列,求出最长上升子序列的长度。
输入格式
输入的第一行是序列的长度 N
。
第二行给出序列中的 N
个整数,这些整数的取值范围都在 0
到 10000
。
输出格式
最长上升子序列的长度。
数据范围
1≤N≤1000
要想求得最长递增子序列,要使得序列增长的尽量慢,比如面对1,4,3时选择1,3而不是1,4.
from bisect import bisect_left
n = int(input())
numbers = list(map(int, input().split()))
li = [numbers[0]]
for i in range(1, n):
if numbers[i] > li[-1]:
li.append(numbers[i])
else:
li[bisect_left(li, numbers[i])] = numbers[i]
print(len(li))