给出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);
}