#include <iostream>
#include <fstream>
#include <deque>
#define Dim 100000
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int T, N, K, P[50010], V[100010], last[100010];
bool fr[620000];
int main()
{
f>> N ;
for (int i = 1; i <= N; i++) f >> V[i];
int L = 1;
last[1] = 1;
for (int i = 2; i <= N; i++)
{
int st = 1, dr = L, mij;
while (st <= dr)
{
mij = (st + dr) / 2;
if (V[i] > V[last[mij]]) st = mij + 1;
else dr = mij - 1;
}
if (st == L + 1) L += 1;
last[st] = i;
}
g << L << '\n';
return 0;
}