JOISC2022 鱼2
记两个做法。
首先一定存在某些区间将鱼卡住不能往外吃。
容易发现区间形成树形结构,我们要查询不被任何区间覆盖的点数。
因为一个区间跳到包含区间至少会让和翻倍,所以深度是 的。
1
赛时想了一堆笨办法维护这个树形结构,比如用树套树维护最小的包含它的区间,这样很难做到低于 ,也不知道为啥有人 过了。
其实可以不用维护整个树形结构:
全局查询比较好解决,经典区间 个数可以维护区间最值及个数解决。
单点修改会产生以其为左端点和以其为右端点的区间,这通过线段树二分很好找到。
而跨过它的区间,就比较难维护,然后补充在后面。
赛时只想到了 3log 做法。
2
Orz wry.
直接拿线段树维护合并段的关系。
对于一个段,维护 个前缀不能向右扩展, 个后缀不能向左扩展,然后这些段之间是可以合并的,过程类似twopointers,如果可以走到整个段就统计,如果卡在中间了也统计。
也是 。
3: 1做法继续的思考。
超级简单不用动脑子的做法。
但是好像卡不过去。
就是直接 像 [地牢游戏] 一样 给值域 分层,暴力找到修改点每层的前驱和前驱的前驱和后继和后继的后继,有且仅有这些点可能成为区间的端点——因为吃了这两个就进入了下一层,所以再靠前或者靠后就一定不会卡住它了。
但是做一次询问要做 4 次修改,端点改成无穷大再改回去。
复杂度理论 ,常数巨大。
本文已经结束了。本文作者:ღꦿ࿐(DeepSea),转载请注明原文链接:https://www.cnblogs.com/Dreamerkk/p/17970947,谢谢你的阅读或转载!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步