template <classT> inlinevoidread(T &a){ registerchar c;while (c = getchar(), c < '0' || c >'9');register T x(c - '0');while (c = getchar(), c >= '0' && c <= '9') {x = (x << 1) + (x << 3) + (c ^ 48);}a = x; }
int n, s[MAXn + 10], cnt; intmain(){ read(n); for (re int i = 1, a; i <= n; ++i) { read(a); if (a > s[cnt]) { s[++cnt] = a; } else { *lower_bound(s + 1, s + 1 + cnt, a) = a; } } printf("%d\n", cnt); }