及其简单,一眼就看出来了。

在建出二叉查找树之后,显然只要满足父亲比儿子先选择就好了,考虑 DP。

fif_i 表示处理了 ii 的子树的方案数,那么显然有转移方程:

fi=fls×frs×(sizls+sizrssizls)f_{i}=f_{ls}\times f_{rs}\times {siz_{ls}+siz_{rs}\choose siz_{ls}}

表示左右儿子分别选择一个方案,然后乘上分别选择的方案数。

发现上面的选择是线性的,而时间复杂度的瓶颈是建 BST,考虑优化。

发现加入的编号满足堆的性质,是笛卡尔树,直接 O(n)O(n) 建树,轻松爆标,速度是 PYB 代码的 44 倍。