- 动态规划:直接根据当前值和目标比较值的大小关系,更新dp数组即可,注意初始化是"1"不是"0",因为最短子序列长度是1
- 贪心算法+二分法搜索:主要要理解tails数组的含义,指定长度的递增子序列的末尾最小值。
# import sys
# for line in sys.stdin:
# a = list(map(int, line.split()))
# dp = [1] * len(a)
# for i in range(len(a)):
# for j in range(i):
# if a[i] > a[j]:
# dp[i] = max(dp[i], dp[j] + 1)
# print(max(dp))
import sys
for line in sys.stdin:
a = list(map(int, line.split()))
tails = []
for i in a:
l, r = 0, len(tails)
while l < r:
m = (l+r)//2
if i < a[m]:
r = m
else:
l = m + 1
if l == len(tails):
tails.append(i)
elif i < tails[l]:
tails[l] = i
print(len(tails))