#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
int n,a[maxn],f[maxn];
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
int len=0;
f[len]=0;
memset(f,-0x3f,sizeof(f));
for(int i=1;i<=n;i++){
int t=lower_bound(f,f+len,a[i])-f;//这里用upper_bound就过不了,没想通(>_<)
if(t==len)
if(a[i]>f[len])
f[++len]=a[i];
else
f[len]=a[i];
else
f[t]=a[i];
}
cout<<len;
return 0;
}