2021清北学堂国庆刷题班Day1

比赛补题

A. elective

https://noip.ac/rs/show_problem/3631

巨大简单的一道题,$ n \leq 20 $ 直接 $ 2 ^ {n} $ 枚举选的情况,每次判断是否更优并记录即可。

B. seq

https://noip.ac/rs/show_problem/3632

补题的时候感觉依旧有点懵...感觉不是很好理解。

首先是题意得问题。题面的意思是,对于每一个操作,把 $ [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

https://noip.ac/rs/show_problem/3633

\[|i - j| \geq dist(i, j) \]

我们假设 $ 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 $$

所以可以考虑线段树合并,在合并过程中统计子树中答案。分别维护两个权值线段树,合并时可以考虑启发式合并。

另外此题还存在点分治做法,本人尚且不明,日后补充。

D. graph

https://noip.ac/rs/show_problem/3634

posted @ 2021-10-02 20:09  Shadow_hyc  阅读(58)  评论(0)    收藏  举报