题解:CF840E In a Trap
缪凌锴_Mathew · · 题解
cnblogs
前言
做法和别的题解基本一样,提供一个去
解法
考虑根号算法,
将
称
预处理出
先处理
维护方法
dfs 的过程中,DS 动态维护
S(x) 中的点的a 的前8 位。称
p_x 为x 的256 级祖先(可能不存在)。dfs 进入
x 时,加入\dfloor{a_x}{256} ,若p_x 存在则删除\dfloor{a_{p_x}}{256} 。dfs 退出
x 时,删除\dfloor{a_x}{256} ,若p_x 存在则加入\dfloor{a_{p_x}}{256} 。这样 DS 里面肯定是
S(x) 中的点的a 的前8 位。发现加入删除总次数是
O(n) 的。然而查询次数是
O(n\sqrt n) 的。直接用 trie 总复杂度就
O(n\sqrt n\log n) 了。考虑根号平衡,修改
x 遍历i=0\sim 255 ,将x\oplus i 加入删除。需要支持
O(1) 加入删除0\sim 255 的数,O(1) 查询最小值。注意到
256=4\times 64 ,用4 个unsigned long long压位即可。
设
若
时间复杂度 unsigned short 卡空间。
Submission