#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define maxn 1005
int a[maxn];
int d[maxn];
int n;
int len;
int find(int x)
{int l=1,r=len;
while(l<r)
{
int mid=(l+r)>>1;
if(d[mid]>=x)
r=mid;
else
l=mid+1;
}
return l;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
d[1]=a[1];
len=1;
for(int i=2;i<=n;i++)
{
if(a[i]>d[len])
d[++len]=a[i];
else
{
int w=find(a[i]);
d[w]=a[i];
}
}
printf("%d\n",len);
return 0;
}
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define maxn 1005
int a[maxn];
int d[maxn];
int n;
int len;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
d[1]=a[1];
len=1;
for(int i=2;i<=n;i++)
{
if(a[i]>d[len])
d[++len]=a[i];
else
{
int w=lower_bound(d+1,d+len+1,a[i])-d;
d[w]=a[i];
}
}
printf("%d\n",len);
return 0;