CF226E Noble Knight's Path

重链剖分真可爱,数据结构真可爱。

tags:

  • data structures

  • trees

  • 2900

洛谷 CF

  • 给出一棵 n 个点的树,初始所有点为白色。还有 q 次操作,第 i 个操作发生在第 i 个时刻,初始状态时刻为 0。每次操作为:

    • 1 u,将 u 变成黑色。保证每个点只会发生一次 1 操作。

    • 2 a b k y,查询从 a 走到 b有向路径上,第 k 个没有在 [y+1,i] 中的时刻被染成黑色的点编号。有向路径不含 a,b

  • n,q105

  • 4.00 s/250.00 MB

考虑重剖套主席树维护 dfn 区间内在 [0,i] 时刻有多少个点被染成黑色。1 操作在之前版本上修改,2 操作直接继承上一版本。

对于查询,找到并按顺序存放 a,b 路径上(不含 a,b)的重链 dfn 区间。考虑确定第 k 个点在第几条重链上。

可以通过主席树 [0,i] 版本和 [0,y] 作差得出这条链内 [y+1,i] 时刻有多少个点被染成黑色,然后再用链的长度减去这个值就可以得到这条链这个时刻区间内没被染成黑色点的个数。

枚举一条链时,若当前所有链的满足条件的点个数总和 cnt 不足 k,则跳到下一条链,否则就是查询这条链上第 kcnt 个满足条件的点。

这个点一定满足,这条链上以其为结尾的前缀的满足条件的点的个数 kcnt,且这个前缀长度最小。容易发现答案具有单调性,二分 + 主席树即可。

注意前缀是对于这条链在路径上的子串而言的,要注意这条链的方向。

时间复杂度为 O(qlog2n),空间复杂度为 O(qlogn)。离线做法可以做到空间 O(n+q)

提交记录(Accepted 780 ms/63.43 MB,含代码)

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