/*
TASK:psort
LANG:C++
*/

#include <cstdio>
#include <climits>
#include <algorithm>

const int MAXN = 1 << 16;

int N;
int vec[MAXN];

int main () {
	scanf ("%d", &N);
	
	int i;
	for (i = 0; i < N; ++i)
		vec[i] = INT_MAX;
	vec[0] = INT_MIN;
	int crnt;
	for (i = 0; i < N; ++i) {
		scanf ("%d", &crnt);
		*(std::upper_bound (vec, vec + N + 2, crnt)) = crnt;
	}

	for (i = 1; vec[i] != INT_MAX; ++i);
	
	printf ("%d\n", N - i + 1);
}


