#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
using namespace std;
int main()
{
int n;
while(~scanf("%d",&n))
{
vector<int> vt;
vt.push_back(-1000000);
for(int i=0;i<n;i++)
{
int k;
cin>>k;
if(k>vt.back()) vt.push_back(k);
else
{
int t=lower_bound(vt.begin(),vt.end(),k)-vt.begin();
vt[t]=k;
}
}
cout<<vt.size()-1<<endl;
}
return 0;
}