#include <bits/stdc++.h>
using namespace std;
struct Warstwa {
  Warstwa() {}
  Warstwa(int a) : v(1, a) {}
  vector<int> v;
  bool operator<(const Warstwa& dane) const {
    return v[int((v).size()) - 1] < dane.v[int((dane.v).size()) - 1];
  }
};
void zrob_test() {
  vector<Warstwa> t;
  int n;
  cin >> n;
  while (n--) {
    int a;
    cin >> a;
    __typeof(t.begin()) w = (t.begin());
    w = upper_bound(t.begin(), t.end(), Warstwa(a - 1));
    if (w == t.end())
      t.push_back(Warstwa(a));
    else
      w->v.push_back(a);
  }
  cout << int((t).size()) << '\n';
}
int main() {
  ios_base::sync_with_stdio(0);
  zrob_test();
  return 0;
}
