int a[M],b[M];
int search(int num,int low,int high)
{
int mid;
while(low<=high)
{
mid=(low+high)/2;
if(num>=b[mid])
low=mid+1;
else
high=mid-1;
}
return low;
}
int DP(int n)
{
int i,len,pos;
b[1]=a[1];
len=1;
for(int i=2; i<=n; ++i)
{
if(a[i]>b[len]) //如果a[i]比b[]数组中最大还大直接插入到后面即可
{
len=len+1;
b[len]=a[i];
vis[i]=1;
}
else //用二分的方法在b[]数组中找出第一个比a[i]大的位
{
//并且让a[i]大的位置并且让a[i]替代这个位置
pos=search(a[i],1,len);
b[pos]=a[i];
}
}
return len;
}
- 版权声明:本文基于《知识共享署名-相同方式共享 3.0 中国大陆许可协议》发布,转载请遵循本协议
- 文章链接:http://www.carlstedt.cn/archives/648 (转载时请注明本文出处及文章链接)
相关文章
- 本文无相关文章
- 本文无相关文章


发表评论
快来吐槽一下吧!