F 的做法实在是太优美了www。
A Ehab Fails to Be Thanos
B Ehab Is an Odd Person
给定一个序列,你仅可以交换奇偶不同的两个位置,求字典序最小的序列。
若所有数奇偶性相同,显然无法操作。否则,可以两两任意操作,排序即可。
C Ehab and a Special Coloring Problem
给 $2$ 到 $n$ 所有数字染色,要求满足互质的两个数颜色不同。
考虑类似于调和级数那样子染色即可。
D Ehab and the Expected XOR Problem
在 $1$ 到 $2^n$ 内选一些数字,满足任意子串异或和不为 $0$ 或 $x$,求长度最长的序列。
转化为构造前缀和,显然前缀和两两不同且没有两个异或起来为 $x$,显然选了一个就不能选另外一个异或起来为 $x$,容易构造。
F Ehab and the Big Finale
给定一棵树,猜一个隐藏的点 $x$。
有 $36$ 次询问,询问一个点到 $x$ 的距离,询问 $x$ 的一个祖先到 $x$ 的路径上下一个点。
最开始时,询问到根的距离,这样就有很多备选解,考虑将这个解空间缩小。
再考虑给定的询问方式,我们于是需要加速一个点往下跳转的过程,并且保证正确性,而不是一步一步走。
考虑轻重链剖分,当前考虑的根为 $u$,重链的底端为 $v$,考虑 $v$ 和 $x$ 的最近公共祖先,联想树上差分距离这个过程的逆,可以得到这个 LCA。
如果 LCA 不是答案,那么将 LCA 往下移一步递归地解决即可。
显然,轻链的个数是 $O(\log n)$ 的,每次最多只能询问两次。
注意:有一个询问可以在缩小问题规模时维护出来,无需单独询问。
类似于轻重链剖分的做法,也可以用重心分解来加速跳转。
讨论一下 $x$ 是不是在当前的重心内,在重心内就往下走一步,否则取当前的子问题为重心的父亲,并标记删除。