等这场战争结束之后

建操作树,此时需要支持加边删边查询一个连通块的 kth。

加边删边用两个集合做启发式操作很好维护,考虑查一个连通块的 kth,通常的套路是二分,于是这道题如果加边时启发式合并、删边时启发式分裂、查询时二分,看上去是一个很自然的想法,但是复杂度并不对。令 nm 同阶,先用 m2 合并出两个大小为 n4 的集合,剩下 m2 次操作一直反复对这两个集合合并、分裂。

这道题看上去很难带启发式分裂这种操作,考虑用可持久化并查集维护加边删边,但是这样就没法二分了,考虑我们刚才的启发式合并是在干什么,实际上就是维护两个桶然后对其做合并,这两个桶中的信息并非都有用,经典套路,对值域分块,求出 kth 在哪一块以后暴力枚举,因此我们在并查集上维护 O(nB) 个块中的出现次数(离散化),找到在哪一个块后暴力检查块中的数和 x 是否在同一个中,这样的复杂度是 O(mBlogn+nmB),瞎取一个 O(n) 看上去无法通过,可以二分一个块长,理论上取 nmn+mlogn,时间复杂度 O(mmlogn),看上去可以通过,不过空间是 O(nn),无法通过。可以对于每个块分开处理,这样空间就是线性的了,但是注意此时需要预处理并查集合并时的根。线性做法不过就是将暴力检查是否在同一个块变成随机求,期望 O(mn)

代码明天补,要是没补我就是傻逼。

傻逼就傻逼。

posted @   BYR_KKK  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
历史上的今天:
2024-02-06 数学
点击右上角即可分享
微信分享提示