2022 04 04 集訓題解

2022-10-09 12:06:05 字數 627 閱讀 5541

小 w 的手上有一顆 \(n\) 個節點的二叉搜尋樹,裡面有從 \(1\) 到 \(n\) 這 \(n\) 個數字。(二叉搜尋樹即為中序遍歷恰好為 \(1\) 到 \(n\) 的二叉樹)

現在你想知道這棵樹的形態。但是小 w 不會直接告訴你,只允許你詢問以某個點為根的子樹是否恰好包含 \([l,r]\) 中的所有點。

你需要在 \(2\times n\) 次查詢之內得到整棵樹的形態。

考慮建立笛卡爾樹的步驟,那我們需要做的就是乙個點是否在另外乙個點的左兒子裡面,你發現既然已經當了左兒子,那麼裡面一定已經構造完了,所以我們只需要判斷這個點是否覆蓋這個區間即可。

#include#include"interact.h"

using namespace std;

#define int register int

#define maxn 105

struct node;

node sta[maxn];

int lson[maxn],rson[maxn];

int getr (int x)

void guess(int n);

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

}

2022 02 06 集訓題解

不難注意到的是,我們假設 f i 為 i 之前 le a i 的值的個數,那麼我們需要滿足 sum i f i sum i min i,a i 又因為我們可以知道 f i le min i,a i 所以我們對於每乙個 i 都有 f i min i,a i 考慮如何構造這樣的 a 可以發現,我們選了乙...

2020 08 18 集訓題目題解

講數字dp,然後發現自己學暴了,這裡挑幾道有意思的題目記錄一下,以免將來死得太慘。題目傳送門 定義 windy 數為滿足相鄰兩位差值 le 2 的數,給出 l,r 求出 l,r 內有多少 windy 數。l,r le 2 times 10 9 我 這樣乙個板子題調了乙個小時,果然是我自己菜爆了。我們...

2020 08 05 集訓題目題解

題目傳送門 給出乙個長度為 n 的數列 a 有 m 次操作,每次操作分別為以下兩種 n,m le 5 times 10 4 其實我們可以發現乙個事情,最後 c bmod varphi 1 varphi 1 bmod varphi p varphi p 然後我們就發現到了一定程度之後再加上 c 都不會...