最少拦截系统

 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 }

 

posted on 2013-08-05 16:00  ok_boy  阅读(209)  评论(0编辑  收藏  举报

导航