一个好用的工具——析合树
例题
CF526F
题意:
给出一个1~ n n n的排列,问有多少个区间的值域是连续的。
CF997E
题意:
给出一个1~ n n n的排列,有 q q q次询问,每次问 [ l , r ] [l,r] [l,r]内,有多少个区间的值域是连续的?
题解:
单调栈+线段树的扫描线做法
析合树离线做法
析合树在线做法
LuoguP4747
题意:
给出一个1~ n n n的排列,有 q q q次询问,每次问包含位置区间 [ l , r ] [l,r] [l,r]的连续段的最短长度是多少,连续段的定义为排序后值域连续,可以证明解存在且唯一。
XSY3344
emm,这题原题好像是2018EC Final B.Mysterious … Host
这里有简要题解
题意:
题解:
所有 n n n阶排列形成的等价类个数 等于 有 n n n个叶子的不同形态的析合树棵树。
析合树有以下性质:
- 合点的儿子个数 ≥ 2 \geq2 ≥2(叶子节点除外)
- 析点的儿子个数 ≥ 4 \geq4 ≥4
设 f i f_i fi为所有 i i i阶排列形成的等价类个数(即有 i i i个叶子的不同形态的析合树棵树)。
显然可以 O ( n 2 ) O(n^2) O(n2)DP得到 f n f_n fn。
多项式优化:
记 F ( x ) = ∑ i ≥ 0 f i x i F(x)=\sum_{i\geq0}f_ix^i F(x)=∑i≥0fixi,那么有
F ( x ) = ( F 2 ( x ) + F 3 ( X ) + F 4 ( x ) + . . . ) + ( F 4 ( x ) + F 5 ( X ) + F 6 ( x ) + . . . ) + x F(x)=(F^2(x)+F^3(X)+F^4(x)+...)+(F^4(x)+F^5(X)+F^6(x)+...)+x F(x)=(F2(x)+F3(X)+F4(x)+...)+(F4(x)+F5(X)+F6(x)+...)+x
F ( x ) = ( F 2 ( x ) + F 4 ( x ) ) ( 1 + F ( x ) + F 2 ( X ) + F 3 ( x ) + . . . ) + x F(x)=(F^2(x)+F^4(x))(1+F(x)+F^2(X)+F^3(x)+...)+x F(x)=(F2(x)+F4(x))(1+F(x)+F2(X)+F3(x)+...)+x
F ( x ) = F 2 ( x ) + F 4 ( x ) 1 − F ( x ) + x F(x)=\frac{F^2(x)+F^4(x)}{1-F(x)}+x F(x)=1−F(x)F2(x)+F4(x)+x
参考——两个学长的 B l o g Blog Blog:
https://www.cnblogs.com/ywwyww/p/10193748.html
https://blog.csdn.net/Mys_C_K/article/details/85385019