其他分享
首页 > 其他分享> > T206418 【模板】最长上升子序列 标程

T206418 【模板】最长上升子序列 标程

作者:互联网

题目链接:https://www.luogu.com.cn/problem/T206418

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
const int MAXN=200000*25;
int a[MAXN];//原数列 
int b[MAXN];//更新数列 
int main(){
    int n;   
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%d",&a[i]);
    }
    int cnt=0;//当前上升子序列长度 
    for(int i=1;i<=n;i++){
        //b[cnt]:当前最大值
        if(a[i]>b[cnt])b[++cnt]=a[i];
        else{//如果无法为上升子数列直接增加新数 
            //对上升子序列的值贪心的减少,该行为存在后效性 
            int lastIndex=lower_bound(b+1,b+cnt+1,a[i])-b;
            b[lastIndex]=a[i];
        } 
    }
    printf("%d\n",cnt);
    return 0;
}

 

标签:cnt,数列,int,lastIndex,T206418,MAXN,include,标程,模板
来源: https://www.cnblogs.com/zbsy-wwx/p/15424283.html