#include<bits/stdc++.h>
#define f1(i, n) for(int i=1;i<=n;++i)
#define f0(i, n) for(int i=0;i<n;++i)
#define ull unsigned long long
#define ll long long
#define rev(a) reverse(a.begin(),a.end())
#define all(x) x.begin(),x.end()
#define so(A, n) sort(A+1, A+n+1)
using namespace std;
const int maxn = 1e6 + 1;
const int N = 5e5 + 1;
int A[30001], D[30001];
int main()
{
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int n;
cin >> n;
for (int i = 1; i <= n; ++i) {
cin >> A[i];
}
int d = 0;
for (int i = 1; i <= n; ++i) {
int vt = lower_bound(D + 1, D + d + 1, A[i]) - D;
if (vt > d) {
++d;
D[d] = A[i];
}
else if (vt == d) {
D[vt] = min(D[vt], A[i]);
}
}
cout << d;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2RlZmluZSBmMShpLCBuKSBmb3IoaW50IGk9MTtpPD1uOysraSkKI2RlZmluZSBmMChpLCBuKSBmb3IoaW50IGk9MDtpPG47KytpKQojZGVmaW5lIHVsbCB1bnNpZ25lZCBsb25nIGxvbmcKI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSByZXYoYSkgcmV2ZXJzZShhLmJlZ2luKCksYS5lbmQoKSkKI2RlZmluZSBhbGwoeCkgeC5iZWdpbigpLHguZW5kKCkKI2RlZmluZSBzbyhBLCBuKSBzb3J0KEErMSwgQStuKzEpCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmNvbnN0IGludCBtYXhuID0gMWU2ICsgMTsKY29uc3QgaW50IE4gPSA1ZTUgKyAxOwppbnQgQVszMDAwMV0sIERbMzAwMDFdOwppbnQgbWFpbigpCnsKCWlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7IGNpbi50aWUoMCk7IGNvdXQudGllKDApOwoJaW50IG47CgljaW4gPj4gbjsKCWZvciAoaW50IGkgPSAxOyBpIDw9IG47ICsraSkgewoJCWNpbiA+PiBBW2ldOwoJfQoJaW50IGQgPSAwOwoJZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgKytpKSB7CgkJaW50IHZ0ID0gbG93ZXJfYm91bmQoRCArIDEsIEQgKyBkICsgMSwgQVtpXSkgLSBEOwoJCWlmICh2dCA+IGQpIHsKCQkJKytkOwoJCQlEW2RdID0gQVtpXTsKCQl9CgkJZWxzZSBpZiAodnQgPT0gZCkgewoJCQlEW3Z0XSA9IG1pbihEW3Z0XSwgQVtpXSk7CgkJfQoJfQoJY291dCA8PCBkOwp9Cgo=