#include<bits/stdc++.h>
using namespace std;
const long long MaxN = 1e6 +5, INF = 1e18;
long long n, a[MaxN], dp[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];
}
for (long long i=1; i<=n; i++)
{
dp[i]=INF;
}
for (long long i=1; i<=n; i++)
{
long long pos= lower_bound(dp+1,dp+n+1,a[i])-dp;
dp[pos]=a[i];
}
for (long long i=n; i>=1; i--)
{
if(dp[i]<INF)
{
cout << i;
return 0;
}
}
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKY29uc3QgbG9uZyBsb25nIE1heE4gPSAxZTYgKzUsIElORiA9IDFlMTg7CmxvbmcgbG9uZyBuLCBhW01heE5dLCBkcFtNYXhOXTsKaW50IG1haW4oKQp7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOwogICAgY2luLnRpZSgwKTsKICAgIGNpbiA+PiBuOwogICAgZm9yIChsb25nIGxvbmcgaT0xOyBpPD1uOyBpKyspCiAgICB7CiAgICAgICAgY2luID4+IGFbaV07CiAgICB9CiAgICBmb3IgKGxvbmcgbG9uZyBpPTE7IGk8PW47IGkrKykKICAgIHsKICAgICAgICBkcFtpXT1JTkY7CiAgICB9CiAgICBmb3IgKGxvbmcgbG9uZyBpPTE7IGk8PW47IGkrKykKICAgIHsKICAgICAgICBsb25nIGxvbmcgcG9zPSBsb3dlcl9ib3VuZChkcCsxLGRwK24rMSxhW2ldKS1kcDsKICAgICAgICBkcFtwb3NdPWFbaV07CiAgICB9CiAgICBmb3IgKGxvbmcgbG9uZyBpPW47IGk+PTE7IGktLSkKICAgIHsKICAgICAgICBpZihkcFtpXTxJTkYpCiAgICAgICAgewogICAgICAgICAgICBjb3V0IDw8IGk7CiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KICAgIH0KfQo=