#include <bits/stdc++.h>
#define ll long long
#define N 100011
using namespace std;
ll n;
ll a[N],t[N],m;
map<ll,ll> mp;
void update(ll pos,ll val) {
for (;pos<=m;pos+=pos&(-pos)) {
t[pos]=max(t[pos],val);
}
}
ll get(ll pos) {
ll ans=0;
for (;pos>0;pos-=pos&(-pos)) {
ans=max(ans,t[pos]);
}
return ans;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cin >> n;
for (ll i=1;i<=n;i++) {
cin >> a[i];
mp[a[i]]++;
}
for (auto &x:mp) {
m++;
x.second=m;
}
for (ll i=1;i<=n;i++) a[i]=mp[a[i]];
ll ans=0;
for (ll i=1;i<=n;i++) {
update(a[i],1);
update(a[i],get(a[i]-1)+1);
}
cout << get(m) << endl;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgTiAxMDAwMTEKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKbGwgbjsKbGwgYVtOXSx0W05dLG07Cm1hcDxsbCxsbD4gbXA7CnZvaWQgdXBkYXRlKGxsIHBvcyxsbCB2YWwpIHsKICAgIGZvciAoO3Bvczw9bTtwb3MrPXBvcyYoLXBvcykpIHsKICAgICAgICB0W3Bvc109bWF4KHRbcG9zXSx2YWwpOwogICAgfQp9CmxsIGdldChsbCBwb3MpIHsKICAgIGxsIGFucz0wOwogICAgZm9yICg7cG9zPjA7cG9zLT1wb3MmKC1wb3MpKSB7CiAgICAgICAgYW5zPW1heChhbnMsdFtwb3NdKTsKICAgIH0KICAgIHJldHVybiBhbnM7Cn0KaW50IG1haW4oKQp7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUoMCk7CiAgICBjaW4gPj4gbjsKICAgIGZvciAobGwgaT0xO2k8PW47aSsrKSB7CiAgICAgICAgY2luID4+IGFbaV07CiAgICAgICAgbXBbYVtpXV0rKzsKICAgIH0KICAgIGZvciAoYXV0byAmeDptcCkgewogICAgICAgIG0rKzsKICAgICAgICB4LnNlY29uZD1tOwogICAgfQogICAgZm9yIChsbCBpPTE7aTw9bjtpKyspIGFbaV09bXBbYVtpXV07CiAgICBsbCBhbnM9MDsKICAgIGZvciAobGwgaT0xO2k8PW47aSsrKSB7CiAgICAgICAgdXBkYXRlKGFbaV0sMSk7CiAgICAgICAgdXBkYXRlKGFbaV0sZ2V0KGFbaV0tMSkrMSk7CiAgICB9CiAgICBjb3V0IDw8IGdldChtKSA8PCBlbmRsOwp9Cg==