//Longest Increasing Subsequence
#include <iostream>
#include <cstdio>
#define N 1000000
using namespace std;
int a[N], b[N];
int lis(int n)
{
int len;
int l, r, mid;
if(n == 0)
return 0;
b[1] = a[0];
len = 1;
for(int i=1; i<n; i++)
{
l = 1;
r = len;
while(l <= r)
{
mid = (l+r) / 2;
if(a[i] > b[mid])
l = mid+1;
else
r = mid-1;
}
b[l] = a[i];
if(l > len)
len += 1;
}
return len;
}
int main()
{
int n;
while(scanf("%d", &n) !=EOF)
{
for(int i=0; i<n; i++)
scanf("%d", &a[i]);
printf("%d\n", lis(n));
}
return 0;
}