1 /*HDU1257最长递增*/
2 #include<stdio.h>
3 #include<string.h>
4 int find(int *c,int len,int n)
5 {
6 int l=0,r=len;
7 while(l<=r)
8 {
9 int mid=(l+r)/2;
10 if(c[mid]<n) l=mid+1;
11 else if(c[mid]>n) r=mid-1;
12 else return mid;
13 }
14 return l;
15 }
16 int main()
17 {
18 int i,j,n;
19 int a[1005], c[1005],len;
20 while(scanf("%d",&n)!=EOF)
21 {
22 for(i=0;i<n;i++)
23 scanf("%d",&a[i]);
24 c[0]=-1;
25 c[1]=a[0];
26 len=1;
27 for(i=1;i<n;i++)
28 {
29 j=find(c,len,a[i]);
30 c[j]=a[i];
31 if(j>len) len=j;
32 }
33 printf("%d\n",len);
34 }
35 return 0;
36 }