2018/1/27 每日一学 最长不降序子序列的O(n*logn)算法

时间:2023-03-09 19:40:46
2018/1/27 每日一学 最长不降序子序列的O(n*logn)算法

手动维护一个数组模拟即可,233……

可以使用algorithm中的lower_bound(相当于二分)

代码如下:

#include<cstdio>

#include<algorithm>

using namespace std;

int a[1000000],tot,n,x;

int main(){

    scanf("%d",&n);

    for(int i=1;i<=n;i++)

    {

        scanf("%d",&x);

        if(x>a[tot]) a[++tot]=x;

        else {

        int nd=lower_bound(a,a+tot+1,x)-a;a[nd]=x;  

        }        

    }

    printf("%d\n",tot);

    for(int i=1;i<=tot;i++)

    printf("%d ",a[i]);

    return 0;

}