#!/usr/bin/env python3
from math import ceil

def max_increasing_subseq_length(X):
    L = 0
    M = [None] * (len(X) + 1)
    for i, x in enumerate(X):
        # binary search for the largest positive j <= L such that X[M[j]] < X[i]
        lo, hi = 1, L
        while lo <= hi:
            mid = ceil((lo + hi) / 2)
            if X[M[mid]] < x:
                lo = mid + 1
            else:
                hi = mid - 1

        # After searching, lo is 1 greater than the length of the longest
        # prefix of X[i]
        M[lo] = i
        if lo > L:
            L = lo
    return L

N, numbers = int(input()), list(map(int, input().split()))
assert len(numbers) == N
print(max_increasing_subseq_length(numbers))