首先有一个想法,就是建出一颗类似树的结构.
然后(i)个子树合并的方案设为(f[i])
实质上,(f[n])就是(L:1,1,1,...,n)的方案
有(f[n]=(n-1)f[n-1]+sum_{i=2}^{n-2}(n-i-1)f[i]f[n-i])
这个递推式的含义就是:
考虑从大到小(或从小到大)插入数
假设此时已经有([2,n+1])
分两种情况
(part1:)
此时序列满足条件,那么(1)只要不和(2)挨着就不会有问题,即(f[n - 1]*(n+1-2))
(part2:)
此时序列不满足条件,那么我们可以使用(1)截断一段不合法的区间.
因为(1)只能截断一段,我们枚举这一段的长度(iin[2,n-2])
然后把(1)放进(i)个的方案为(f[i])
将(1)放进去后,这一段就相当"1"去继续截断,即(f[n-i])
考虑给这一段分配权值(实际上等于展开一个点)
一共(n-j+1)个点
含有(2)的点是不能展开的(1截不断)
最后一个点不用截
然后又因为含有(2)的点一定不在最后(因为(2)是最小的,所以序列不可能合法)
所以可以展开的点为(n-j-1)个
这个式子显然可以分治(NTT)