CF 1638 题解

CF 1638 题解

A Reverse

贪心的想, 找到第一个 \(a_i\not=i\) 的位置, 然后操作 \([i,pos_{a_i}]\) 这个区间即可.

B Odd Swap Sort

由于只能交换奇数和偶数, 奇数偶数内部的相对位置不能改变, 因此合法的充要条件是奇数之间已经有序, 偶数亦然.

C Inversion Graph

由于有效树边只有 \(O(n)\) 条, 因此如果能够精确找到有效的边, 那么暴力做就是对的.

考虑维护前 \(i\) 个元素中每个连通块的最大值, 那么加入一个新元素 \(v\) 时, 比 \(v\) 大的代表元会连接起来, 这些元素删掉, 形成的新的代表元是删掉的最大的那个 (没删掉东西就是这个元素自己).

D Big Brush

倒序考虑操作, 你需要找到一个颜色一致的 (以前覆盖过的可以不考虑) 正方形, 由于后续判断时不考虑覆盖过的, 那么无后效性, 能操作更优. 因此写一个 bfs 即可.

E Colorful Operations

首先, 这题一定是颜色段均摊, 那么考虑同颜色加怎么做.

一定要打懒标记, 因此考虑一个段变色的时候, 加上原来颜色的 tag, 再减掉现在颜色的 tag 即可.

这两个操作都是区间加, 用 BIT 维护即可.

F Two Posters

首先确认这题 \(O(n^2)\) 能过.

如果两个广告牌没有公共列, 那么枚举断点, 左右两边暴力做即可.

如果有公共列, 考虑对相交和包含做分讨:

  • 如果相交, 对左边和右边的元素建单调栈, 然后可以证明最优解一定卡在单调栈上, 那么你在两边的单调栈上双指针即可.

包含也是同理的.

现在复杂度是 \(O(n^3)\), 但是考虑到最优的包含区间一定是枚举一个最小值, 然后到左侧的第一个比他小右边, 右边同理, 这样只有 \(O(n)\) 个区间, 总复杂度 \(O(n^2)\).

posted @ 2024-11-24 11:28  snowycat1234  阅读(31)  评论(0)    收藏  举报