#include<bits/stdc++.h>
using namespace std;
#define forinc(i, a, b) for(int i = a; i <= b; i++)
#define maxn 229999
int n, ans, a[maxn], bit[maxn], f[maxn];
vector<int> b;
void update(int u, int x) {
for(; u <= n; u += (u & (-u)))
bit[u] = max(bit[u], x);
}
int get(int u) {
int res = -1;
for(; u; u -= (u & (-u)))
res = max(res, bit[u]);
return res;
}
signed main() {
cin >> n;
forinc(i, 1, n) {
cin >> a[i];
b.push_back(a[i]);
}
sort(b.begin(), b.end());
forinc(i, 1, n) {
int pos = lower_bound(b.begin(), b.end(), a[i]) - b.begin() + 2;
f[i] = get(pos-1) + 1;
update(pos, f[i]);
ans = max(ans, f[i]);
}
cout << ans;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIGZvcmluYyhpLCBhLCBiKSBmb3IoaW50IGkgPSBhOyBpIDw9IGI7IGkrKykKI2RlZmluZSBtYXhuIDIyOTk5OQppbnQgbiwgYW5zLCBhW21heG5dLCBiaXRbbWF4bl0sIGZbbWF4bl07CnZlY3RvcjxpbnQ+IGI7Cgp2b2lkIHVwZGF0ZShpbnQgdSwgaW50IHgpIHsKICAgIGZvcig7IHUgPD0gbjsgdSArPSAodSAmICgtdSkpKQogICAgICAgIGJpdFt1XSA9IG1heChiaXRbdV0sIHgpOwp9CgppbnQgZ2V0KGludCB1KSB7CiAgICBpbnQgcmVzID0gLTE7CiAgICBmb3IoOyB1OyB1IC09ICh1ICYgKC11KSkpCiAgICAgICAgcmVzID0gbWF4KHJlcywgYml0W3VdKTsKICAgIHJldHVybiByZXM7Cn0KCnNpZ25lZCBtYWluKCkgewogICAgY2luID4+IG47CiAgICBmb3JpbmMoaSwgMSwgbikgewogICAgICAgIGNpbiA+PiBhW2ldOwogICAgICAgIGIucHVzaF9iYWNrKGFbaV0pOwogICAgfQoKICAgIHNvcnQoYi5iZWdpbigpLCBiLmVuZCgpKTsKICAgIGZvcmluYyhpLCAxLCBuKSB7CiAgICAgICAgaW50IHBvcyA9IGxvd2VyX2JvdW5kKGIuYmVnaW4oKSwgYi5lbmQoKSwgYVtpXSkgLSBiLmJlZ2luKCkgKyAyOwogICAgICAgIGZbaV0gPSBnZXQocG9zLTEpICsgMTsKICAgICAgICB1cGRhdGUocG9zLCBmW2ldKTsKICAgICAgICBhbnMgPSBtYXgoYW5zLCBmW2ldKTsKICAgIH0KCiAgICBjb3V0IDw8IGFuczsKfQo=