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)\).