2021清北学堂国庆刷题班Day1
比赛补题
A. elective
巨大简单的一道题,$ n \leq 20 $ 直接 $ 2 ^ {n} $ 枚举选的情况,每次判断是否更优并记录即可。
B. seq
补题的时候感觉依旧有点懵...感觉不是很好理解。
首先是题意得问题。题面的意思是,对于每一个操作,把 $ [l, r] $ 中的每一个数都 $ xor $ 上 $ [0, 2 ^ {x_i - 1}) $ 中的任意一个数,注意是这个数组的每一个位置都异或上这个数, 并且这个数组的每一位是 $ int $ 范围内的整数,并不是只有 $ 0 $ 或 $ 1 $ 。
那么可以考虑每一位:对于这个数组中的每一个数,考虑将其拆为一个 $ 31 $ 位的二进制数, 操作的时候可以考虑对每一位单独操作,因为拆位以后两两互不影响。
那么可以考虑差分(因为每次操作是异或,所以这里的差分应该是异或意义下的差分)。对于一次操作而言,它的差分数组和原数组一定唯一。因此每一次操作对于原数组而言是把当前二进制位的 $ [l, r] $ 的每一位都异或 $ 1 $, 所以转化到差分数组上就是在 $ l $ 和 $ r + 1 $ 这两个位置都异或 $ 1 $ 。
那么考虑一步转化:对于在差分数组上的每一步操作,转化为在 $ l $ 和 $ r + 1 $ 这两个点之间连边。每个联通块相互独立,我们考虑一棵 $ n $ 个点的树的线性基最终会是 $ base = n - 1 $,同时因为总共 $ 1 $ 的个数一定是偶数,所以 $ base \leq n - 1 $ ,这样一来就变成了统计有多少个连通块。这个玩意显然可以并查集维护。
C. tree
我们假设 $ i > j $
那么 $$ i - j \geq dep_i + dep_j - 2 \times dep(lca_{i, j}) $$
移项 $$ 2 \times dep(lca_{i, j}) \geq dep_i + dep_j + j - i $$
所以可以考虑线段树合并,在合并过程中统计子树中答案。分别维护两个权值线段树,合并时可以考虑启发式合并。
另外此题还存在点分治做法,本人尚且不明,日后补充。

浙公网安备 33010602011771号