#include<bits/stdc++.h>
using namespace std;
const long long MaxN = 2e5 + 5;
long long n, a[MaxN], d[MaxN];
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> n;
for(long long i = 1; i <= n; i++)
cin >> a[i];
d[0] = LLONG_MIN;
for(long long i = 1; i <= n; i++)
d[i] = LLONG_MAX;
long long ans = 0;
for(long long i = 1; i <= n; i++)
{
long long pos = lower_bound(d + 1, d + ans + 2, a[i]) - d;
d[pos] = a[i];
ans = max(ans, pos);
}
cout << ans;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKY29uc3QgbG9uZyBsb25nIE1heE4gPSAyZTUgKyA1OwoKbG9uZyBsb25nIG4sIGFbTWF4Tl0sIGRbTWF4Tl07CgppbnQgbWFpbigpCnsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjaW4udGllKDApOwoKICAgIGNpbiA+PiBuOwogICAgZm9yKGxvbmcgbG9uZyBpID0gMTsgaSA8PSBuOyBpKyspCiAgICAgICAgY2luID4+IGFbaV07CgogICAgZFswXSA9IExMT05HX01JTjsKICAgIGZvcihsb25nIGxvbmcgaSA9IDE7IGkgPD0gbjsgaSsrKQogICAgICAgIGRbaV0gPSBMTE9OR19NQVg7CgogICAgbG9uZyBsb25nIGFucyA9IDA7CgogICAgZm9yKGxvbmcgbG9uZyBpID0gMTsgaSA8PSBuOyBpKyspCiAgICB7CiAgICAgICAgbG9uZyBsb25nIHBvcyA9IGxvd2VyX2JvdW5kKGQgKyAxLCBkICsgYW5zICsgMiwgYVtpXSkgLSBkOwogICAgICAgIGRbcG9zXSA9IGFbaV07CiAgICAgICAgYW5zID0gbWF4KGFucywgcG9zKTsKICAgIH0KCiAgICBjb3V0IDw8IGFuczsKfQ==