zoukankan      html  css  js  c++  java
  • 改造二叉树

    传送门

    中序遍历+lis

    #include<bits/stdc++.h>
    using namespace std;
    int n,len;
    int g[100005][3],a[100005],b[100005],w[100005];
    bool v[100005];
    inline void dfs(int x){
        if(g[x][0]) dfs(g[x][0]);
        a[++len]=w[x];
        if(g[x][1]) dfs(g[x][1]);
    }
    void lis(){
        for(int i=1;i<=n;i++){
            a[i]=a[i]-i;
        }
        len=1;
        b[1]=a[1];
        for(int i=2;i<=n;i++){
            if(b[len]<=a[i]) b[++len]=a[i];
            else{
                int x=lower_bound(b+1,b+len+1,a[i])-b;
                b[x]=a[i];
            }
        }
        cout<<n-len;
    }
    int main(){
        cin>>n;
        for(int i=1;i<=n;i++){
            scanf("%d",&w[i]);
        }
        for(int i=2;i<=n;i++){
            int fa,ch;
            scanf("%d%d",&fa,&ch);
            g[fa][ch]=i;
        }
        dfs(1);
        lis();
        return 0;
    }
  • 相关阅读:
    iOS
    iOS
    iOS
    iOS
    iOS
    iOS
    iOS
    iOS
    iOS
    iOS
  • 原文地址:https://www.cnblogs.com/duojiaming/p/11688518.html
Copyright © 2011-2022 走看看