1 条题解
-
0
自动搬运
来自洛谷,原作者为

critnos
咔菲好喝。搬运于
2025-08-24 22:34:53,当前版本为作者最后更新于2021-09-02 22:00:23,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
下面认为 。
对 序列分块,块 内维护 。
考虑 序列的修改。区间推平不好做,考虑用颜色段均摊方法(ODT)转为区间加。那么要修改 的每个块的值。
修改 会对块内所有 的 做出贡献。
设值域数组 ( 表示 的次数)。设区间加数为 ,则贡献为 $\sum_{i=l}^r \sum_{j=i}^n t_j \times v=v\sum_{i=l}^r \sum_{j=i}^n t_j$。用一些数据结构维护即可。
查询的时候,整块直接查,对于散块查询,需要对 维护一个 区间加, 前缀求和的分块。
考虑 序列的修改。对于整块修改可以直接打标记。散块操作的难点在于维护值域上的后缀和的区间求和。每个块维护一个 ODT,这样就可以插入/删除颜色了。现在要维护一个数据结构,支持:
单点加, 求 。
分成两类计算。
-
。对于这类数, 出现了 次。那么这部分的贡献是 。
-
。这类数每个数都出现了 次。贡献为 。
两类都可以用分块处理。
注意修改 序列的时候同时维护每块的值。
为了做到线性空间,我们需要离线逐块处理。
在逐块处理的时候,要用一些手段让复杂度不退化到 。大概就是把 操作的贡献分别算,以规避掉逐块处理时每块都要对 数组维护分块的过程。
注意细节。
时间 ,空间线性。
非常神奇的,每一处都恰好根号平衡。
卡常的话自己摸索一下?很快乐的。
btw,这个卡常还是叉姐以前教我的/流泪
-
- 1
信息
- ID
- 7191
- 时间
- 2000~7000ms
- 内存
- 256MiB
- 难度
- 7
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者