#include <fstream>
//#include <iostream>
#define maxi 100005
using namespace std;
ifstream f ("scmax.in");
ofstream g("scmax.out");
int n,v[maxi];
int minim[maxi];/// minim[i] cel mai mic element care sfarseste un subsir cresc de lungime i
int k;
int bs(int x)
{
int i=1,j=k;
while (i<=j)
{
int m=(i+j)/2;
if (minim[m]<x)
{
i=m+1;
}
else {
j=m-1;
}
}
return i;
}
int main()
{
f>>n;
for (int i=1;i<=n;i++)
f>>v[i];
minim[1]=v[1];
k=1;
for (int i=2;i<=n;i++)
{
if (v[i]>minim[k])
k++,minim[k]=v[i];
else
minim[bs(v[i])]=v[i];
}
g<<k;
}