from bisect import bisect_left def lis(array): lis_array = [array[0]] for i in range(1, len(array)): if array[i] > lis_array[-1]: # aがlis_arrayの末尾よりも大きければ増加部分列を延長できる lis_array.append(array[i]) else: # そうでなければ、「arrayより小さい最大要素の次」をarrayにする # 該当位置は、二分探索で特定 lis_array[bisect_left(lis_array, array[i])] = array[i] return len(lis_array) n = int(input()) a = [int(input()) for i in range(n)] print(lis(a))