2020-2021:teams:farmer_john:week_18
这是本文档旧的修订版!
团队训练
本周推荐
2sozx
CF 1396D Rainbow Rectangles
题解:
首先我们可以枚举矩形的左边和右边所在的 $x$,先固定矩形的左侧边缘 $x_l$,向右侧扫。对于每个点记录 $pre_i$ 为在区间内颜色相同,$y$ 值小于等于自己的点的 $y$ 值;$nxt_i$ 为在区间内颜色相同,$y$ 值大于等于自己的点的 $y$ 值。
考虑先将 $x_l \sim L$ 内部所有点都考虑到。令 $f(i)$ 表示纵坐标为 $i$ 要满足包含 $k$ 个颜色的最低 $y$ 值,显然随着 $i$ 的下降 $f_i$ 是单调不增的,这为下面的操作提供了复杂度的保证。考虑左右侧确定时的答案是多少,$ans = \sum_{i = 0}^{L} (L + 1 - f_i)$,可以用线段树维护 $f_i$ 的和。
现在考虑删除矩形右侧的一列,对于一个点 $i$ 被删除,那么 $pre_i + 1 \sim y_i$ 的点的 $f$ 值显然要和 $nxt_i$ 取最大值,这个也可以用线段树维护,由于 $f_i$ 的单调性,线段树的复杂度是正确的,每次删除后统计答案即可,复杂度 $O(n^2\log(n))$ 。
Bazoka13
题目名称
JJLeo
CF1396E Distance Matching
我们每次考虑根节点的各个子树,每次都考虑未匹配节点数最多的那个子树,我们每次将该子树中的两个点$x,y$进行匹配(而不是像上述所说各自匹配到根节点另外子树的节点),对最终权值的减少量为$2 \cdot dep_{\operatorname{lca}(x,y)}$,因此我们只需不断地寻找两个合适的点进行匹配,使得最终权值不断减少直到$k$。最后,因为我们每次都相当于让最大子树的节点数减少两个,因此根节点一直都是重心,最后只需将剩余点按dfn序排序,贪心地令$i$和$i+\frac{|v|}{2}$匹配即可(类似2020牛客第二场那题)。
个人训练
2sozx
比赛
题目
Bazoka13
比赛
题目
JJLeo
比赛
题目
2020-2021/teams/farmer_john/week_18.1599204360.txt.gz · 最后更改: 2020/09/04 15:26 由 jjleo