HDU 6305 笛卡爾樹 求期望

2021-10-07 23:44:05 字數 638 閱讀 4293

首先這個題要分析不少東西:

b陣列是取0~1內的實數 任意兩個元素相等的概率為0   所以我們可以認為 b陣列的每個元素都不相等 可以看作全排列

對於合法序列b  其元素的期望值為1/2 (0~1上的均勻分布) 所以序列的期望值為 n/2

a和b滿足題目條件 當且僅當 a和b的笛卡爾樹同構  而全排列總共有

綜上所述  最終的答案為

#includeusing namespace std;

const int n = 1e6+10;

typedef long long ll;

ll mod = 1e9+7;

ll inv[n],ans;

int a[n],ls[n],rs[n];

stacks;

int dfs(int rt)

int main()

ans=1ll*n*inv[2]%mod;

int rt;

while(!s.empty()) rt=s.top(),s.pop();

dfs(rt);

printf("%lld\n",ans);

} return 0;

}

pat笛卡爾樹

笛卡爾樹是一種特殊的二叉樹,其結點包含兩個關鍵字k1和k2。首先笛卡爾樹是關於k1的二叉搜尋樹,即結點左子樹的所有k1值都比該結點的k1值小,右子樹則大。其次所有結點的k2關鍵字滿足優先佇列 不妨設為最小堆 的順序要求,即該結點的k2值比其子樹中所有結點的k2值小。給定一棵二叉樹,請判斷該樹是否笛卡...

笛卡爾樹小結

粗略的學習了一下笛卡爾樹 主要是為了平衡樹打基礎吧 因為關於平衡樹 treap 早忘了 splay 不信任複雜度 然後 我能學一種比較簡單的樹y 笛卡爾樹.這裡以建出小根堆為例。描述區間性質的樹 可以當成二叉搜尋樹不過並不平衡因為每次都是選取當前區間最小值當做為根 然後顯然根據區間的數的排列不同樹的...

笛卡爾樹學習筆記

笛卡爾樹學習筆記 笛卡爾樹是一種二叉樹,每乙個結點由乙個鍵值二元組 k,w 構成。要求 k 滿足二叉搜尋樹的性質,而 w 滿足堆的性質。乙個有趣的事實是,如果笛卡爾樹的 k,w 鍵值確定,且 k 互不相同,w 互不相同,那麼這個笛卡爾樹的結構是唯一的 在一般情況下,未說明 k 時,我們預設 k 為下...