/*
author : [ Godsent ]
created : 2025.08.11 20:47:30
*/
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#define el "\n"
#define int long long
#define lb lower_bound
#define ub upper_bound
#define fi first
#define se second
#define sz(x) ((int)(x).size())
#define all(v) (v).begin(), (v).end()
#define pb push_back
#define prs(n) fixed << setprecision(n)
const int mod = 1e9 + 7;
const int N = 2e5 + 5;
const int INF = 1e18;
using namespace std;
using namespace __gnu_pbds;
template <typename T>
using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
int n;
int a[N];
signed main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
#ifndef ONLINE_JUDGE
freopen("test.in", "r", stdin);
freopen("test.out", "w", stdout);
#endif
cin >> n;
for (int i = 1; i <= n; i++)
cin >> a[i];
multiset<int> s;
int res = 0;
for (int i = 1; i <= n; i++) {
auto it = ub(all(s), a[i]);
if (it == s.end()) {
s.insert(a[i]);
res++;
continue;
}
s.erase(it);
s.insert(a[i]);
}
cout << res << el;
return 0;
}
LyoKICAgIGF1dGhvciAgOiBbIEdvZHNlbnQgXQogICAgY3JlYXRlZCA6IDIwMjUuMDguMTEgMjA6NDc6MzAKKi8KCiNpbmNsdWRlIDxiaXRzL3N0ZGMrKy5oPgojaW5jbHVkZSA8ZXh0L3BiX2RzL2Fzc29jX2NvbnRhaW5lci5ocHA+CiNpbmNsdWRlIDxleHQvcGJfZHMvdHJlZV9wb2xpY3kuaHBwPgojZGVmaW5lIGVsICJcbiIKI2RlZmluZSBpbnQgbG9uZyBsb25nCiNkZWZpbmUgbGIgbG93ZXJfYm91bmQKI2RlZmluZSB1YiB1cHBlcl9ib3VuZAojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCiNkZWZpbmUgc3ooeCkgKChpbnQpKHgpLnNpemUoKSkKI2RlZmluZSBhbGwodikgKHYpLmJlZ2luKCksICh2KS5lbmQoKQojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIHBycyhuKSBmaXhlZCA8PCBzZXRwcmVjaXNpb24obikKCmNvbnN0IGludCBtb2QgPSAxZTkgKyA3Owpjb25zdCBpbnQgTiA9IDJlNSArIDU7CmNvbnN0IGludCBJTkYgPSAxZTE4OwoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdXNpbmcgbmFtZXNwYWNlIF9fZ251X3BiZHM7CnRlbXBsYXRlIDx0eXBlbmFtZSBUPgp1c2luZyBvcmRlcmVkX3NldCA9IHRyZWU8VCwgbnVsbF90eXBlLCBsZXNzPFQ+LCByYl90cmVlX3RhZywgdHJlZV9vcmRlcl9zdGF0aXN0aWNzX25vZGVfdXBkYXRlPjsKCmludCBuOwppbnQgYVtOXTsKCnNpZ25lZCBtYWluKCkgewogIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogIGNpbi50aWUoMCk7CiAgY291dC50aWUoMCk7CgojaWZuZGVmIE9OTElORV9KVURHRQogIGZyZW9wZW4oInRlc3QuaW4iLCAiciIsIHN0ZGluKTsKICBmcmVvcGVuKCJ0ZXN0Lm91dCIsICJ3Iiwgc3Rkb3V0KTsKI2VuZGlmCgogIGNpbiA+PiBuOwogIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykKICAgIGNpbiA+PiBhW2ldOwoKICBtdWx0aXNldDxpbnQ+IHM7CiAgaW50IHJlcyA9IDA7CiAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSB7CiAgICBhdXRvIGl0ID0gdWIoYWxsKHMpLCBhW2ldKTsKICAgIGlmIChpdCA9PSBzLmVuZCgpKSB7CiAgICAgIHMuaW5zZXJ0KGFbaV0pOwogICAgICByZXMrKzsKICAgICAgY29udGludWU7CiAgICB9CiAgICBzLmVyYXNlKGl0KTsKICAgIHMuaW5zZXJ0KGFbaV0pOwogIH0KICAKICBjb3V0IDw8IHJlcyA8PCBlbDsKCiAgcmV0dXJuIDA7Cn0=