输入
第1行:1个数N,N为序列的长度(2 <= N <= 50000) 第2 - N + 1行:每行1个数,对应序列的元素(-10^9 <= S[i] <= 10^9)
输出
输出最长递增子序列的长度。
输入示例
8 5 1 6 8 2 4 5 10
输出示例
5
#include<iostream>
#include<cstdio>
#include<algorithm>
#define inf 1000001000
using namespace std;
const int maxn=50000+100;
int dp[maxn],a[maxn];
int main()
{
int n,i,j,ans;
cin>>n;
for(i=0;i<n;i++) cin>>a[i];
fill(dp,dp+n,inf);
for(i=0;i<n;i++) *lower_bound(dp,dp+n,a[i])=a[i];
cout<<lower_bound(dp,dp+n,inf)-dp<<endl;
return 0;
}