【题解】CF1918B Minimize Inversions
题目大意
给定两个长度均为 的序列 。你可以进行任意次如下操作:
- 选择两个正整数 ,交换 ,再交换 。
请最小化两个序列中逆序对个数之和。
解题思路
贪心方式:
先将 序列由小到大排序,将 以对应的下标重新排序,此时 和 的逆序对之和最小。
证明:
对于任意的两对元素 和 , 和 ,无论如何交换,他们之间对应的数永远是固定的,不难看出,每对数对于逆序对的贡献只有 或 两种,则交换两对数对于逆序对的影响有三种:
-
从贡献为 到贡献为 。
-
从贡献为 到贡献为 。
-
不变,贡献均为 。
通俗来说,只要让每对下标 和 中最多只有 个贡献,那么任何一对数的贡献都不会多于交换后的贡献。
那么应该如何做到呢,贪心的核心就在于排序,让 序列由小到大排序, 中就不存在逆序对了, 中最多只有 个贡献,此时 中的逆序对便是答案。
AC Code
1 | void solve() |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Thy's Blog!