随机数生成器
sol 研发了一个神奇的随机数系统,可以自动按照环境噪音生成真·随机数。
现在 sol 打算生成 (n) 个 ([1,x]) 的整数 (a_1, ..., a_n),然后进行一些询问。(q) 次询问,每次询问 (i) 有两个参数 (l_i) 和 (r_i),sol 会计算 (min_{l_i leq j leq r_i} a_j)((a) 数组中下标在 (l_i, r_i) 之间的数的最小值)。
最后测试结果会是这些询问得到的结果的最大值。
sol 进行了很多次实验,现在他想问问你测试结果的期望大小是多少,对 (666623333) 取模。
(n,x,qle 2000)
( m Sol:)
将期望转为 (sum P(Xge x)),枚举 (x),那么对于 (<x) 的数我们设为 (0),大于的设为 (1),问题等价于求方案数使得至少存在一个区间全 (1)
将每个区间规定在右端点,我们 Dp 出不存在一个区间全 (1) 的概率,这个条件又等价于区间内至少有一个 (0),设 (f_{i,j}) 表示考虑到位置 (i),离 (i) 最近的 (0) 位置为 (j) 的方案数,那么我们枚举 (i) 处的区间,然后将小于的 (j) 清 (0) 即可。
转移显然仅分为两种:
- 转移到 (f_{i,i}),此时 (i) 处填 (0)
- 转移到 (f_{i,j}),此时 (i) 处填 (1)
前者我们单独转移,后者的转移我们可以考虑通过双指针来维护。通过双指针将非法区间清 (0),然后填入 (1) 等价于区间乘以一个数,注意到是整体乘法,我们不妨打一个乘法标记,然后每次加入数的时候给其除以此值即可。
复杂度为 (mathcal O((n+q)x))