#include<bits/stdc++.h>
using namespace std;
long long n,a[100005]={-1},f[100005],s[100005],top=0,ans;//s:栈
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=1;i<=n;i++)
f[i]=1;
memset(s,0x3f,sizeof s);
s[0]=0;
for(int i=1;i<=n;i++)
{
if(a[i]>s[top])
s[++top]=a[i],f[i]=top;
else
{
long long l=0,r=top+1,mid=(l+r)>>1;
while(l+1<r)
{
if(s[mid]>=a[i])
r=mid-1;
else
l=mid;
mid=(l+r)>>1;
}
// for(int i=1;i<=top;i++)
// {
// cout<<s[i]<<' ';
// }cout<<'\n';
// cout<<'l'<<l<<'\n';
f[i]=l+1;
s[l+1]=min(s[l+1],a[i]);
// for(int i=1;i<=top;i++)
// {
// cout<<s[i]<<' ';
// }cout<<'\n';
// top=max(top,l+1);
}
ans=max(ans,f[i]);
}
cout<<ans;
return 0;
}