题意
给出两个长度为 n n n 的序列 A , B A, B A,B, 恰好交换 A A A 中的两个数 k k k 次, 使得 ∑ i = 1 n ∣ A i − B i ∣ \sum_{i=1}^n \mid A_i - B_i \mid ∑i=1n∣Ai−Bi∣ 最大.
2 ≤ n ≤ 5 × 1 0 5 , 0 ≤ k ≤ 1 0 1 8 , − 1 0 8 ≤ A i , B i ≤ 1 0 8 2 \le n \le 5 \times 10^5, 0 \le k \le 10^18, -10^8 \le A_i, B_i \le 10^8 2≤n≤5×105,0≤k≤1018,−108≤Ai,Bi≤108
题解
首先有一个很重要的贡献转换, 考察 min A i − B i ∣ \min A_i - B_i \mid minAi−Bi∣ 这个式子, 如果 A i > B i A_i > B_i Ai>Bi, 那么 A i A_i Ai 对答案的贡献是 + A i +A_i +Ai, B i B_i Bi 对答案的贡献是 − B i -B_i −Bi; 如果 A i < B i A_i < B_i Ai<Bi, 那么 A i A_i Ai 对答案的贡献是 − A i -A_i −Ai, B i B_i Bi 对答案的贡献是 + B i +B_i +Bi. 这样可以知道, 两个序列里的数, 对答案的贡献要么是正的自己, 要么是负的自己, 这样就把本身"绑在一起"的 A i , B i A_i, B_i Ai,Bi 贡献"分开"了. 同时还需要满足的条件是正的符号个数等于负的符号个数, 都等于 n n n. 不考虑次数限制, 相当于给这 2 n 2n 2n 个数分配正负号各 n n n 个, 使得他们的和最大. 所以排序, 最大的 n n n 个正号, 剩下 n n n 个负号即可.
把最优的符号分配方案放到原来的顺序上看, 每个位置 i i i 上的两个数可能是如下情况:
-++-
+-+-
其中第一第二就是最优的了, 而第三第四, 即 ++
和 --
, 交换以后才是更优的. 由于正负号个数相等的性质, ++
和 --
的个数是相等的, 所以可以交换, 使得全部变成 +-
和 -+
.
现在再来考虑恰好 k k k 次交换的限制.
当 n > 2 n > 2 n>2 时, 根据鸽子原理, 一定有 2 2 2 个相同的符号. 让他们交换, 不会改变答案. 所以恰好 k k k 次在 n > 2 n > 2 n>2 的情况下是至多 k k k 次. n = 2 n = 2 n=2 特判, 不再考虑.
接下来的问题是, 交换哪些更优? 稍微推一下:
假设
i
i
i 位置最优贡献是两个 +
, 更大的原本对答案的贡献依然是+, 更小的原本对答案的贡献是-, 和某个 -
交换后对答案的贡献是+. 也就是说, 对于
i
i
i 这个位置, 交换能够使答案增加
2
min
A
i
,
B
i
2 \min \\{ A_i, B_i \\}
2minAi,Bi
对于两个 -
也这样考虑, 交换能够使答案增加
−
2
max
A
j
,
B
j
=
2
min
−
A
j
,
−
B
j
-2 \max \\{ A_j, B_j \\} = 2 \min \\{-A_j, -B_j\\}
−2maxAj,Bj=2min−Aj,−Bj
他们是独立的, 所以只需要确定两个数的符号, 然后看看需不需要交换, 如果需要, 看看是+还是-, 分开排序, 取最大即可.
复杂度 O ( n log n ) O(n \log n) O(nlogn)