//最长上升子序列之二分优化
#include<bits/stdc++.h>
using namespace std;
int find(int x)
{
int l=1,r=len,mid;
while(l<=r)
{
mid=(l+r)/2;
if(x>b[mid]) l=mid+1;
else r=mid-1;
}
}
int main()
{
int n=9;
int a[101]={0,2,5,9,4,6,7,1,7,2};
int b[101];//有序子序列
int len;//有序子序列的长度
len=1;
b[1]=a[1];
for(int i=2;i<=n;i++)
{
if(a[i]>b[len])//大于则添加
{
b[++len]=a[i];
}
else//小于则替换
{
j=find(a[i]);
b[j]=a[i];
}
}
cout<<len;
//值得注意的是b数组存储的不是最长上升子序列
}
最长上升子序列之二分优化
最新推荐文章于 2024-05-23 00:22:50 发布