#include <iostream>
#include <algorithm>

using namespace std;

const int MAX_N = 1e5 + 10;

int n, A[MAX_N], L[MAX_N];

int LIS() {
	L[0] = A[0];
	int length = 1;

	for (int i = 1; i < n; ++i)
	{
		if (L[length-1] < A[i]) L[length++] = A[i];
		else *lower_bound(L, L + length, A[i]) = A[i];
	}

	return length;
}

int main(int argc, char const *argv[])
{
	cin >> n;
	for (int i = 0; i < n; ++i) cin >> A[i];

	cout << LIS() << endl;
	return 0;
}
