#Init
dp = [0]*(n+1);
for i in range(n) :
for j in range(i) :
dp[i] = max(dp[i], dp[j] + 1)
max(dp)
2. 이분탐색
DP로 구현 하는 것보다 더 빠르게 구현하는 방법
시간 복잡도 : O(NlogN) N개에 대해서 이분탐색
모든 범위를 살펴보는 것이 아닌, 현재 연결되어 있는 부분 수열에서 계속하여 갱신하여 처리
#BOJ 12015번
datas = list(map(int,input().split()))
dp = [datas[0]]
for data in datas :
if data > dp[-1] :
dp.append(data)
else :
dp[bisect.bisect_left(dp , data)] = data
print( len(dp) )