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

monstersqwq
急急急急急急寄寄寄寄寄寄搬运于
2025-08-24 22:53:28,当前版本为作者最后更新于2023-12-18 10:30:36,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
标算
标算是 ,考虑维护每一个数的所有出现位置,每次进行删除操作,把附近的 个被影响的 bit 重新计算,维护出现位置(支持插入删除查询最小值和集合大小)使用 set,由于删除次数不超过 ,总复杂度 。
能不能再给力一点啊?
我们实际不需要维护每一个数的出现位置,可以只维护当前长度的所有二进制数的出现位置,每次长度变化的时候重构整个串,由于长度变化仅有 次,每次只需要线性建 set 即可,删除的复杂度由于只维护了当前长度,变为 。
你再想想?
以下为赛时做法。
设当前询问长度为 。
可以把 set 直接换成 vector,只需要维护当前所有长度为 的子串的值,每次查询时直接遍历整个 vector,由于每次插入只会被枚举一次,此时查询并删除的部分复杂度降至 。
能不能再给力一点啊?
建出 01trie,问题转化为叶子上插入删除,按照 bfs 序查询某个子树的 。
设阈值 ,设 。
当 时,操作次数至多 ,使用任意的 数据结构维护上述操作,复杂度 。
当 时,使用上述的重构整串的方法,复杂度 。
取 ,总复杂度 。
能不能再给力一点啊?
我并没有得到线性的做法,但若每次只需统计 的出现次数,并给定一个 的出现位置将其删除,可以做到与上述做法无关的 。
初始时,以层数为 的所有节点作为关键点,维护每个叶子属于的关键点,以及每个关键点所属的 层点,将贡献记录在叶子所属关键点以及关键点所属 层点上。每次 变化时重构第二类所属关系并重新维护子树大小, 超过 时类似地重构关键点设置,而第一类所属关系可以位运算得出。
复杂度为 $O(\sum n^{\frac{2^k-1}{2^k}}\times \frac{1}{2^k}\log n)=O(n)$。
如果有整个题目线性的做法,教一下教一下教一下谢谢喵
- 1
信息
- ID
- 9585
- 时间
- 6000ms
- 内存
- 512MiB
- 难度
- 5
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者