标签:
给出一个长度为N的序列,请求出其最长上升子序列的长度。
首先很容易想到
于是我们可以二分查找比a[i]小的最后一个g[k],则
#include<cstdio>
#include<algorithm>
using namespace std;
int n,a[100050];
int c[100050];
int len=0;
int find (int x)
{
int l=1,r=len,mid;
while (l<=r) {
mid=(l+r)>>1;
if (x>c[mid]) l=mid+1;
else r=mid-1;
}
return l;
}
int main()
{
freopen("lis.in","r",stdin);
freopen("lis.out","w",stdout);
scanf("%d",&n);
for (int i=1;i<=n;i++) scanf("%d",&a[i]);
for (int i=1;i<=n;i++) {
int k=find(a[i]);
c[k]=a[i];
len=max(len,k);
}
printf("%d",len);
return 0;
}
膜拜所有膜拜我的人
版权声明:蒯代码有风险,爆0概不负责;随意转载,注明地址
标签:
原文地址:http://blog.csdn.net/qq_22141519/article/details/47298179