最长下降子序列
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define INF 40000
int c[40000],len;
int find(int l,int r,int a)
{
int mid=(l+r)/2;
while(l<r)
{
if(c[mid]>a) l=mid+1;
else r=mid;
mid=(l+r)/2;
}
return r;
}
int main()
{
int a,count=0,j,i;
while(scanf("%d",&a)!=EOF&&(a!=-1))
{
j=0;len=0;
c[0]=INF;
count++;
c[1]=a;len++;
while(scanf("%d",&a)!=EOF&&(a!=-1))
{
if(a<c[len]) j=++len;
else j=find(1,len,a);
c[j]=a;
}
printf("Test #%d:\n",count);
printf(" maximum possible interceptions: %d\n\n",len);
}
return 0;
}