老线段树了……
考虑期望的线性性,拆成每个结点的概率。
设 f,g 分别为一个结点被打标记,其祖先被打标记的概率。
对于结点 [l,r],设其父亲为 [L,R],考虑以下五种不同的修改区间:
- 不进入其父亲。
- 进入其父亲,并在该结点上打了标记。
- 在其除了自身以外的祖先上打了标记。
- 将父亲的标记下推。
- 进入了该结点。
令其概率分别为 p1,p2,p3,p4,p5,则显然转移为 (g,f)→((p1+p4)g+p2+p3,(p1+p3)f+p4g+p2)
定义变换 (g,f)(a,b,c,d,e)→(ag+b,cg+df+e)
考虑两个变换的复合,做一些 dirty works 易知其对原形式封闭,即具有结合律,具体地, (a0,b0,c0,d0,e0)∘(a1,b1,c1,d1,e1)=(a0a1,b0a1+b1,a0c1+c0d1,d0d1,b0c1+e0d1+e1)
然后可以做变换的快速幂。
时间复杂度 O(nlogk)。
代码:
1 |
|