发现求 push_down 期望次数是每个非叶节点的 push_down 概率之和,所以我们只要求出 n−1 个非叶节点的概率求和就行了。
设一个线段树上的区间是 [l,r] ,那么一次操作包它的概率是 pi=2×l(n−r+1)n×(n+1)
枚举包含的次数,有 ansk=m∑i=0(mi)pik(1−pk)m−i×fi,其中 fi 表示 i 次从 [−1,V] 中选出一个数,最后的和不为 0 的概率。
也就是 fi=(V+2)i−[x0](V∑j=−1xj)i(V+2)i, 不妨把 V 加 2,有 fi=Vi−[x0](V−2∑j=−1xj)iVi。
考虑怎么对于 ∀i∈[0,m] 求出 [x0](V−2∑j=−1xj)i ,发现这里有个负指数,不好处理,不妨先平移一下:
设F(x)=1−xV1−x,则要求的是 [x0](F(x)x)i ,也就是 [x0](xF(x))−i,这样做是为了方便下面的拉格朗日反演。
设 G 为上面那个东西,H 是 G 的复合逆。
使用另类拉格朗日反演:[xn]Gk=[x−k−1]F′F−n−1,带进去有:
[x0]G−i=[xi−1]H′(x)H(x)=[xi]H′(x)H(x)x ,于是我们只要求出 H 就行了。
因为有 G(H(x))=x,所以 H−H2−x+xHV≡0,可以用牛顿迭代法求出 H。
但注意到多项式 exp 常数太大了,于是考虑取个阈值,在 V≥lim 时可以 O(m2V) 算出 fi,否则直接暴力多项式快速幂。
求出 fi 以后,可以通过多项式多点求值或者分治 FFT 计算答案。
本文作者:henrici3106
本文链接:https://www.cnblogs.com/henrici3106/p/16172347.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步