//就是直接拿的最少拦截系统 的代码 不过不能用万能头文件
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
#define MAXN 40005
int arr[MAXN], ans[MAXN], len;
int main()
{
int n,i;
while(~scanf("%d", &n)){
for(i=0; i<n; ++i)
scanf("%d", &arr[i]);
ans[0] = arr[0];
len=1;
for(i=1; i<n; ++i){
if(arr[i]>ans[len-1]){
ans[len]=arr[i];
len++;
}else{
int pos=lower_bound(ans, ans+len, arr[i])-ans;//查找非递减序列[first,last) 内第一个大于或等于某个元素的位置。
ans[pos] = arr[i];
}
}
printf("%d\n", len);
}
return 0;
}