Loading

三千彩绘为晴风

Codeforces Round 905 (Div. 1)

最幸运的一次!除了 F 都过了。

A1/A2.Dances

注意到我们等价于找最大匹配,把两个序列混合一起排序后,等价于把 \(a\) 看成左括号,\(b\) 看成右括号求括号匹配。

A2 的话,先求出没有被消掉的最大的 \(b_j=x\),那么只要 \(a_1<x\) 就能增加一个匹配,否则不能,简单维护即可。

B.Time Travel

魔改一下,Dijkstra,用一条边更新的时候二分出这条边第一次出现的时间即可。

每条边只会被更新一次,复杂度线性对数。

C.Minimum Array

最小化字典序,我们考虑按位确定,用线段树维护当前位置每个操作后的值,可以扫描维护。

然后每一位把不等于最小值的操作删掉即可,均摊线性对数。

D.Split

从小到大依次加点,用 01 表示每个数和当前值的大小关系,那么一个合法区间就是存在某个时刻使得一个前缀是 0 另一半是 1,注意到每次加点只会生成最多一个这样的极大区间,总共只有 \(O(n)\) 个,看成是若干个矩形,跑一遍扫描线就能知道每个询问点是否被覆盖了。

E.Good Colorings

简单构造。
看到矩阵很自然想到二分图,注意到 \(2n\) 个点 \(2n\) 条边一定有环,并且一定是偶环。
问一下环中间的两个点的颜色,这样的环可以被*似*分,并且这条边的颜色一定在某一边里没出现。
这样不断缩小环的规模直到环长 \(=4\) 即可。

posted @ 2024-03-26 20:05  Larunatrecy  阅读(19)  评论(0编辑  收藏  举报