#include <bits/stdc++.h>
using namespace std;
const int Maxn = 1000 * 100 + 10;
int n;
int d[Maxn];
int num[Maxn];
int L = 1;
void input() {
  cin >> n;
  for (int i = 1; i <= n; i++) cin >> num[i];
}
int find_ind(int begin, int end, int j) {
  if (end == begin + 1) {
    return begin;
  }
  int mid = (begin + end) / 2;
  if (num[d[mid]] < num[j]) {
    return find_ind(mid, end, j);
  } else
    return find_ind(begin, mid, j);
}
int main() {
  input();
  d[1] = 1;
  int x;
  for (int i = 2; i <= n; i++) {
    x = find_ind(0, L + 1, i);
    if (d[x + 1] != 0 && num[d[x + 1]] > num[i]) d[x + 1] = i;
    if (x == L) {
      L++;
      d[L] = i;
    }
  }
  cout << L << endl;
}
