[ABC365G] AtCoder Office 题解
一道根号分治的典题。
因为 polylog 不好做(没有有效的数据结构维护许多个一组的区间并),故考虑根号算法。
指定一个分割点
现在询问分为两种。
- 【小人】和【小人】询问。
- 包含【大人】的询问。
先处理第二种,包含【大人】的询问。【大人】的个数不超过
我们预处理出每个【大人】与所有其他人之间的询问。基本的思路就是:
- 枚举【大人】
; - 枚举其他任意一个人
; - 枚举
的所有进出区间(显然可能有多个),对于每个单区间求出其与 的所有区间的交的大小。
由于区间个数总和是
那只剩一个问题:如何快速求一个【大人】和一个单区间的交?
我们将时间离散化,记
这本质是个前缀和,可以在
于是我们对于【大人】
于是,【大人】
再看小人和小人之间的询问。这个直接用类似双指针的思想做,可以在 但是 )
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步