#include <stdio.h>
int OK(int c[],int num[],int i,int k){
int f=1,l=k;
while(f<=l){
int m=(f+l)/2;
if(num[c[m]]<num[i]) f=m+1;
else l=m-1;
}
return f;
}
int LIS(int num[],int n){
int c[5001],k=1;
c[0]=-1,c[1]=0;
for(int i=0;i<n;i++){
int dex=OK(c,num,i,k);
c[dex]=i;
if(dex>k) k=dex;
}
return k;
}
int main(){
int n,num[5001];
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",&num[i]);
int ans=LIS(num,n);
printf("%d
",ans);
return 0;
}