Description
Solution
Lemma 1
若我们将 a a a 从小到大排序,那么答案的上界为
∑ i = n + 1 2 n a i − ∑ i = 1 n a i \sum_{i=n+1}^{2n}a_i-\sum_{i=1}^n a_i i=n+1∑2nai−i=1∑nai
考虑构造一个能达到上界的算法。
为方便叙述,我们考虑构造一个合法括号序列,匹配的两个数被求和。
令 f i f_i fi 表示,在排序后 i i i 是否在前一半。我们将原序列从左往右扫描,用栈实时维护未匹配的左括号,并记录下每个左括号来源于哪个位置。
令当前扫描到了 i i i。
- 若栈为空,填上
(
并压入栈中 - 若栈非空,找到栈顶对应的位置
p
p
p,若
f
p
≠
f
i
f_p \neq f_i
fp=fi 则填上
)
并弹栈,否则填上(
并压入栈中
显然,上述构造方式得到的答案,必定合法且取到上界。
Code
咕咕咕