连续段问题小结

一个好用的工具——析合树

oi-wiki

例题

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]的连续段的最短长度是多少,连续段的定义为排序后值域连续,可以证明解存在且唯一。

题解:
扫描线做法
析合树做法
图论做法:题解1 题解2

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)=i0fixi,那么有
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)=1F(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

附:析合树形态计数 dp

LuoguP6795

Guess you like

Origin blog.csdn.net/Emma2oo6/article/details/120592729