#include<iostream>
#include<algorithm>
#define MAX 100000
using namespace std;

int n, A[MAX+1], L[MAX];

int lis() {
  L[0] = A[0];
  int length = 1;

  for ( int i = 1; i < n; i++ ) {
    if ( L[length - 1] < A[i] )
      L[lenght++] = A[i];
    else
      *lower_bound(L, L + length, A[i]) = A[i];
  }

  return length;
}

int main() {
  cin >> n;
  for ( int i = 0; i < n; i++ )
    cin >> A[i];

  cout << lis() << endl;

  return 0;
}
