P5609 [Ynoi2013] 对数据结构的爱
好像搞了个神秘做法。
考虑离线扫描线,用一个 fhq-Treap 维护所有的询问现在长什么样,然后每次操作就整体加 AiAi,≥p≥p 的减去 pp,这个可以分裂之后打整体标记,然后用那个值域相交的 fhq-Treap 合并实现。
然后你发现这样就过了。
构造一下卡不掉,于是考虑给这个东西编一个势能。
设现在 fhq-Treap 维护的东西为 aa 序列,定其势能为 n−1∑i=1log(ai+1−ai)n−1∑i=1log(ai+1−ai),容易发现的是总势能不会超过O(mlogV)O(mlogV),因此我们来考虑减少一个势能的代价。
fhq-Treap 可以在连续段个数乘以 loglog 的时间复杂度内合并两个值域相交的集合,这里连续段指的是合并完之后极长连续的一段满足来自同一边。我们考虑一个最简单的情形,假设其中一个集合为 a1,a2,a3a1,a2,a3,另一个集合为 b1,b2b1,b2,合并后为 a1,b1,a2,b2,a3a1,b1,a2,b2,a3。
原来的势能为 log(a2−a1)+log(a3−a2)+log(b2−b1)log(a2−a1)+log(a3−a2)+log(b2−b1)。考虑 min(log(a2−b1),log(b2−a2))≤log(b2−a2)−1min(log(a2−b1),log(b2−a2))≤log(b2−a2)−1,并且 log(b1−a1)≤log(a2−a1),log(a3−b2)≤log(a3−a2)log(b1−a1)≤log(a2−a1),log(a3−b2)≤log(a3−a2),所以总势能至多增加 O(logn)−1O(logn)−1。
进一步容易用上面的方法证明,如果最终连续段的个数为 SS,则总势能至多增加 O(logV)−14SO(logV)−14S,所以总复杂度 O(nlogn+mlogmlogV)O(nlogn+mlogmlogV)。
这玩意的劣势在于其复杂度是 O(logV)O(logV) 而不是 O(logm)O(logm)(说不定能证明势能是 O(logm)O(logm) 的),但是优势在于可以对每个点设不同的 pp。因为常数比较大需要卡卡常。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· 趁着过年的时候手搓了一个低代码框架
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!
2023-03-05 luogu P8367 [LNOI2022] 盒