根号数据结构
根号数据结构
分块
莫队
根号分治
例题1 P9809 [SHOI2006] 作业 Homework
给定一个集合为 S,初始为空,你需要执行以下两个操作共 N 次。
操作一,在集合 S 中加入一个新元素,其代号为 X,保证 X 在当前集合中不存在。
操作二,在当前的集合 S 中询问所有元素 mod Y 最小的值。
N = 1e5, V=3e5(值域)
对 Y 根号分治。
小于块长的 Y ,把每一个 x 对每一个 Y 处理出答案取 min
对于大于块长的 Y,只有 n / 块长 个不同的商,维护一个有序数组(可以用set维护),
于是对于每一个 y ,枚举每一个 ky ,算出最接近 ky 的数,然后用减法代替取模。
注意,这里还蕴含了一种错解不优的思想。这种做法带了一个log
第二种处理大于块长的 Y 的方法是对值域分块,每个块维护两个信息。
- 大于这个块右端点的数的最小值
- 处于这个块的数要去更新这个块内其他小于这个数的位置的最小值信息。
这个做法显然是不带根号的。
对于第一种做法,我认为取
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】