Processing math: 100%

Loading

LOJ #3397. 「2020-2021 集训队作业」春天,在积雪下结一成形,抽枝发芽

n 个点这样的排列个数为 fn,设 n 个点的合点个数为 an,设 n 个点的析点个数为 bnCn=n!

考虑如何求出 A:仅考虑儿子序列是上升的情况。条件转化为存在一个前缀满足是 [1,k](1<k<n) 的排列。考虑计算不满足的情况,设为 I

I=CCI

I=C1+C

所以 A=2C21+CB=CC21+C

F(C)=CC21+Cx

F=xx21+xF

发现 F(C)=x。于是 FC 互为复合逆,因此 C(F)=x

C=x+xC+x2C

x=F+Fx+F2C(F)

x=F+Fx+F2F

xF=FF+FFx+F2

nfn=n1i=1(i+1)fifni+ni=1ififni+1

fn=n1i=1(i+1)fifnin1i=2ififni+1

分治 FFT 即可。时间复杂度 Θ(nlog2n)Θ(nlog2nloglogn)

由于我懒,就写了 Θ(n2) 的。

posted @   zhoukangyang  阅读(636)  评论(0编辑  收藏  举报
编辑推荐:
· 敏捷开发:如何高效开每日站会
· 为什么 .NET8线程池 容易引发线程饥饿
· golang自带的死锁检测并非银弹
· 如何做好软件架构师
· 记录一次线上服务OOM排查
阅读排行:
· 场景题:假设有40亿QQ号,但只有1G内存,如何实现去重?
· 在 .NET 中使用 Tesseract 识别图片文字
· 欧阳的2024年终总结,迷茫,重生与失业
· Bolt.new 30秒做了一个网站,还能自动部署,难道要吊打 Cursor?
· 敏捷开发:如何高效开每日站会(Daily Stand-up Meeting)
点击右上角即可分享
微信分享提示