[模板] 最长上升子序列

传送门

看题解做的。

想一想最长上升子序列,有一个NlogN的做法。

也就是说如果我们把大小按12345排,改成按a[1]a[2]a[3]a[4]排,就可以求一个b的最长上升子序列。

并且这个b的子序列在a中一定存在,且最长.

#include 
#include 
#include 
#define MAXN 100005

int w[MAXN],b[MAXN];
int N,len;

inline int find(int x) {
    int l = 1; int r = len;
    while(l> 1;
        if(w[mid]>x) r = mid;
        else l = mid + 1;
    }
    return w[l]>x ? l : 0;
}

int main() {

    int a;
    scanf("%d",&N);
    for(int i=1;i<=N;++i) {
        scanf("%d",&a);
        w[a] = i;
    }

    for(int i=1;i<=N;++i) {
        scanf("%d",&b[i]); 
        b[i] = w[b[i]];
    }

    len = 0; w[0] = 0;
    for(int i=1;i<=N;++i) {
        if(w[len]

转载于:https://www.cnblogs.com/Neworld2002/p/10386849.html

你可能感兴趣的:([模板] 最长上升子序列)