首页 > 其他 > 详细

[ZJOI2016]线段树

时间:2020-09-15 20:06:22      阅读:50      评论:0      收藏:0      [点我收藏+]

[ZJOI2016]线段树

给定 \(n\) 个数 \(a_{1,2...n}\),每次随机操作一个区间,即将这个区间 \([l,r]\) 的数变成这个区间的 \(\max\)

操作 \(Q\) 次,输出最后每个元素的权值的期望。

\(n,Q\le 400\)

Solution

期望的套路是差分贡献,当然直接计数也可以这样处理,所以不妨枚举 \(x\),设 \(f_{l,r,k}\) 表示当前操作了 \(k\) 次,区间 \([l,r]\) 均小于 \(x\),同时 \(a_{l-1},a_{r+1}\) 均大于等于 \(x\) 的方案数。(当然小于等于的位置设为 \(0\),其他位置设为 \(1\)),那么答案即为 \(\max - \sum f_{...}\times (w_x-w_{x-1})\)

然后考虑转移:

\[f_{l,r,k}=f_{l,r,k-1}\times q(l,r)+\sum_{j< l} f_{j,r,k-1}(j-1)+\sum_{j> r}f_{l,j,k-1}(n-j) \]

其中 \(q(l,r)\) 表示无用操作的数量。

考虑前缀和数组 \(S_1(l,r,k),S_2(l,r,k)\),分别维护一下即可,复杂度为 \(\mathcal O(n^3q)\)

可以考虑将初始值设为 \(w_x-w_{x-1}\),这样就不需要将答案乘以 \(w_x\) 了。

考虑优化到 \(\mathcal O(n^3)\),不难发现对于不同的 \(x\),转移只有初值不同,所以对每个区间预处理初值和即可。

注意到 \([l,r]\) 的初值即 \(\min(a_{l-1},a_{r+1})-\max(a_{l,l+1...r})\),于是复杂度 \(\mathcal O(n^2q)\)

[ZJOI2016]线段树

原文:https://www.cnblogs.com/Soulist/p/13675016.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!