STL求最长上升子序列长度

 
#include<bits/stdc++.h>
using namespace std;
int a[100],d[100],num=1;
int main()
{
    memset(d,0,sizeof(d));
    int n;
    cin>>n;
    scanf("%d",&a[1]);
    d[0]=a[1];
    for(int i = 2; i <= n; ++i)
        {
            scanf("%d", &a[i]);
            if(a[i]>d[num-1])
            {
                d[num++]=a[i];
            }
            else
            {
                d[lower_bound(d, d + num, a[i]) - d] = a[i];
            }
        }
    cout<<num<<endl;
    return 0;
}

用lower_bound找到上升序列中第一个大于等于新加入数的数,然后替换之

需要注意的是,这样只能求得最长升的长度,不能得到真正的序列。

原文地址:https://www.cnblogs.com/xwxts-LYK/p/13682023.html