#include <bits/stdc++.h>

int main()
{
	int n;
	scanf("%d", &n);
	std::vector<int64_t> dp(n, LLONG_MAX);
	for (int i{}; i < n; i++)
	{
		int64_t a;
		scanf("%lld", &a);
		*std::lower_bound(dp.begin(), dp.end(), a) = a;
	}
	printf("%d\n", std::lower_bound(dp.begin(), dp.end(), LLONG_MAX) - dp.begin());
	return 0;
}
