33,010
社区成员
发帖
与我相关
我的任务
分享
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int f[100001],a[100001],c[100001];
int n,size;
int bsearch(int ai)
{
int l=1,r=size,mid;
while (l<=r)
{//二分查找
mid=(l+r)>>1;
if (ai<c[mid-1] && ai>=c[mid]) return mid;
else if (ai<c[mid]) l=mid+1;
else r=mid-1;
}
}
int main()
{
scanf("%d",&n);
if (!n)
{
printf("0\n");
exit(0);
}
for (int i=1;i<=n;i++) scanf("%d",&a[i]);
f[1]=1;c[1]=a[1];size=1;
for (int i=2;i<=n;i++)
{
if (a[i]==0) continue;
int j;
if (a[i]>=c[1]) j=1;
else if (a[i]<c[size]) j=++size;
else j=bsearch(a[i]);
f[i]=j;c[j]=a[i];
}
printf("%d\n",size);
system("pause");
return 0;
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/bobcowwocb/archive/2009/09/09/4536092.aspx