

선이 교차하지 않아야 함 -> 순서 유지 -> 최대한 많은 연결 -> 최장증가부분수열의 길이 구하는 문제!
from bisect import bisect_left
n = int(input())
ports = list(map(int, input().split()))
# print(ports)
lis = []
for i in range(n):
pos = bisect_left(lis, ports[i])
if pos == len(lis):
lis.append(ports[i])
else:
lis[pos] = ports[i]
print(len(lis))