Jzoj3894 改造二叉樹

2022-05-09 17:37:26 字數 708 閱讀 3541

題意:給你一顆帶權二叉樹,求問要修改幾次可以將其變成二叉搜尋樹?

我們先跑出原樹的中序遍歷,那麼我們問題變成如何用最少的次數將序列變成嚴格上公升

顯然我們可以跑出lis,那麼n-lis就是答案,但是這樣做是有問題的,比如1,4,2,3,lis=3但是顯然我們只修改一次是不行的,因為序列要求嚴格上公升,我們可以以s[i]-i代替原來的s[i]重新跑lis這樣就沒問題了

#pragma gcc optimize("o3")

#pragma g++ optimize("o3")

#include

#include

#include

#define inf 0x7f7f7f7f

using

namespace

std;

int l[100010],r[100010],f[100010];

int s[100010],w[100010],n,t=0;

void mdfs(int x)

}int main()

mdfs(1); memset(f,127,sizeof f);

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

*upper_bound(f,f+n,w[i])=w[i];

printf("%d\n",n-(lower_bound(f,f+n,inf)-f));

}

改造二叉樹

description 小y在學樹論時看到了有關二叉樹的介紹 在電腦科學中,二叉樹是每個結點最多有兩個子結點的有序樹。通常子結點被稱作 左孩子 和 右孩子 二叉樹被用作二叉搜尋樹和二叉堆。隨後他又和他人討論起了二叉搜尋樹。什麼是二叉搜尋樹呢?二叉搜尋樹首先是一棵二叉樹。設key p 表示結點p上的數...

改造二叉樹

題目描述 小y在學樹論時看到了有關二叉樹的介紹 在電腦科學中,二叉樹是每個結點最多有兩個子結點的有序樹。通常子結點被稱作 左孩子 和 右孩子 二叉樹被用作二叉搜尋樹和二叉堆。隨後他又和他人討論起了二叉搜尋樹。什麼是二叉搜尋樹呢?二叉搜尋樹首先是一棵二叉樹。設key p 表示結點p上的數值。對於其中的...

改造二叉樹(bst)

題目大意 給你一棵二叉樹,讓你改變最少的結點上的數值,使這棵二叉樹變成bst,求這個需要改變的最少的結點數。演算法 二分 dp 一開始就沒理解題目問的真正內涵,想了半天的樹型dp,結果肯定是果斷不對,看了題解才知道bst就是二叉樹中序遍歷之後保持有序,進一步得知其實就是要我們求lis。將這棵二叉樹中...