当前位置: 代码迷 >> 综合 >> 最长子序列长度 (贪心+二分 O( Nlog(N) ))
  详细解决方案

最长子序列长度 (贪心+二分 O( Nlog(N) ))

热度:70   发布时间:2024-01-20 21:56:24.0

给出n个数,然后输出这n个数中的最长子序列长度。 
 

贪心+二分求最长子序列长度


#include<iostream>
#include<cstdio> 
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int maxn=100005; 
int b[maxn];
int search(int val,int count)
{int l=1,r=count;while(l<=r){int mid=(l+r)/2;if(b[mid]<val)l=mid+1;else r=mid-1; }return l;
}
int main()
{int n,val,count=0;scanf("%d",&n);for(int i=1;i<=n;i++){ scanf("%d",&val);int num=search(val,count);if(num>count)count++;b[num]=val;}printf("%d\n",count);
}