题意简述
一个长度为n<=1e5的序列,支持两种操作:
- 等概率随机打乱区间[l,r]
- 求区间[l,r]和的期望值
所有结果(珂能是分数形式)都对998244353取膜。
思路
打乱区间[l,r]相当于把l,r中的数都变成a[l…r]的平均值。线段树,区间覆盖区间求和,即珂。
具体思路
为什么这个思路是对的?
随机打乱区间l,r,对于[l,r]中的某一个数x,因为是等概率随机打乱,所以它出现在每一个位置的概率都是相等的,都是1r−l+1。所以,[l,r]被打乱之后,每个位置的期望都是相等的,它都等于a[l…r]的平均值。
那至少区间不重叠的时候,这个算法就正确了。
那么如果我们的区间有重叠怎么办呢?重叠了还正确么?
我们先明确一下期望的概念:E(x)表示x的期望值,其中x是随机变量,而E(x)是一个确定的数,表示x的期望。
而我们知道,E(C)=C,也就是“常数的期望等于本身”。所以E(E(x))=E(x),换句话说,期望套几层都是不变的。
所以我们在期望的基础上求期望,求“期望的期望”,求出来的还是“期望”,不是别的。
所以答案就是正确的了。膜数有点大,记得开longlong。
代码
1 |
|