像潮落潮涌,送我奔向自由。|

寂静的海底

园龄:3年2个月粉丝:59关注:15

JOISC2022 鱼2

记两个做法。

首先一定存在某些区间将鱼卡住不能往外吃。

容易发现区间形成树形结构,我们要查询不被任何区间覆盖的点数。

因为一个区间跳到包含区间至少会让和翻倍,所以深度是 O(log) 的。


1

赛时想了一堆笨办法维护这个树形结构,比如用树套树维护最小的包含它的区间,这样很难做到低于 3log,也不知道为啥有人 3log 过了。

其实可以不用维护整个树形结构:

全局查询比较好解决,经典区间 0 个数可以维护区间最值及个数解决。

单点修改会产生以其为左端点和以其为右端点的区间,这通过线段树二分很好找到。

而跨过它的区间,就比较难维护,然后补充在后面。

赛时只想到了 3log 做法。


2

Orz wry.

直接拿线段树维护合并段的关系。

对于一个段,维护 O(log) 个前缀不能向右扩展, O(log) 个后缀不能向左扩展,然后这些段之间是可以合并的,过程类似twopointers,如果可以走到整个段就统计,如果卡在中间了也统计。

也是 log2


3: 1做法继续的思考。

超级简单不用动脑子的做法。

但是好像卡不过去。

就是直接 像 [地牢游戏] 一样 给值域 2k 分层,暴力找到修改点每层的前驱和前驱的前驱和后继和后继的后继,有且仅有这些点可能成为区间的端点——因为吃了这两个就进入了下一层,所以再靠前或者靠后就一定不会卡住它了。

但是做一次询问要做 4 次修改,端点改成无穷大再改回去。

复杂度理论 log2,常数巨大。

posted @   寂静的海底  阅读(12)  评论(0编辑  收藏  举报  
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起