#include<stdio.h> #include<string.h> #include<algorithm> #include<math.h> #include<stack> #include<queue> using namespace std; int a,dp[100010],top; int find(int l,int r,int temp) { while(l<=r) { int mid=(l+r)/2; if(temp<=dp[mid]) r=mid-1; else l=mid+1; } return l; } int main() { int n,i,j; while(scanf("%d",&n)!=EOF) { top=0; scanf("%d",&a); dp[++top]=a; for(i=1;i<n;i++) { scanf("%d",&a); if(a>dp[top]) dp[++top]=a; else dp[find(1,top,a)]=a; } printf("%d ",top); } return 0; }