#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define max(a, b)	(((a) > (b)) ? (a) : (b))		/* ２個の値の最大値 */
#define min(a, b)	(((a) < (b)) ? (a) : (b))		/* ２個の値の最小値 */
#define ENTER		printf("\n")					/* 改行プリント */
/********************************************************************************************************************************/
/* main *************************************************************************************************************************/
/********************************************************************************************************************************/
int DEBUG = 0;										/* デバッグプリント 提出時は0 */

int dp[100001] = {-1};
int	 a[100001];

int main()
{
	int		N,i,j,l,h,c,ans=0;
	scanf("%d", &N);
	for(i=1; i<=N; i++) {
		scanf("%d",&a[i]);
	}

	for(i=1; i<=N; i++) {
		if (dp[ans] < a[i]) dp[++ans] = a[i];
		else {
			l=0;h=ans;
			while(l!=h) {
				c = (l+h)/2;
				if (dp[c]<a[i]) {
					l = c+1;
				} else {
					h = c;
				}
			}
			dp[l] = a[i];
		}
	}

	if (DEBUG) {
		for(i=0; i<=N; i++) {
			printf("%d ",dp[i]);
		}
		ENTER;
	}

	printf("%d\n",ans);

	return 0;
}

