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

mrsrz
故障机器人搬运于
2025-08-24 22:16:35,当前版本为作者最后更新于2020-01-31 23:31:37,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
本来不想发题解的,lxl 让我发那我也就分享一下我的大常数维护方法了。赛时就写了一部分,赛后又补充了没想到的部分,可能有点不太详细不懂的地方可以私信问我,但是最好不要想着去哪个地方找我的代码交上去,过不了不要怪我序列分块。
分块,维护每种数的前缀出现次数,以及每种数的前缀出现次数的平方。
我们需要计算一段区间的每种数的出现次数的平方的和,考虑记录前缀的平方和,使用 计算。
维护 表示 。其中 表示颜色 在前 个块中的出现次数。
对 的修改,考虑块 处的修改,设这种颜色在前 块和前 块中的出现次数为 ,在 块 中的出现次数增加了 。
对于 的,他们的变化为 。我们对每个左端点为 的 都记录变化量。
对于 的,变化为 。
对于 的,变化为 。我们对每个左端点为 的 都记录变化量 ,对每个右端点为 的 都记录变化量 。
这部分可以使用差分的技巧做到 修改 查询。
那么块 与 之间的所有数的出现次数的平方和,我们只需要知道前 个块的平方和,前 个块的平方和, 的值,就可以求得。计算的复杂度为 。
关于修改操作,边角暴力,中间的如果只有一个数则 修改,这会给这个块产生 个额外颜色段,否则 删除块中的段贡献,总产生的颜色数为 。此时更新 的复杂度为 。
然后对于一个块,如果只有一种颜色,我们不把他计算到 中而是在查询的时候计算这个块的贡献。
那么需要计算进 的颜色段个数是 ,所以每次对颜色段进行重新计算前缀信息,时间复杂度 。
总时间复杂度 ,空间复杂度 。
- 1
信息
- ID
- 4914
- 时间
- 3000ms
- 内存
- 1024MiB
- 难度
- 7
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者