arc147E

· · 题解

首先,根据霍尔定理,考虑对在 b_i 位置上 +1a_i 位置上 -1,那么答案不是 -1 的充要条件是所有前缀和都 \ge 0

接下来考虑怎样最小化交换次数,我们记 S 为所有 a 交换了的人的集合,显然 S 合法的充要条件是 S 包含了所有原本 a_i<b_i 的人,且只对 S 中元素进行 b 位置上的值 +1a 位置上的值 -1,依然满足所有前缀和都 \ge 0

我们考虑从 S 中只包含 a_i<b_i 的人开始进行调整,我们扫描一遍前缀和数组,假设我们扫到一个 sum_i<0 的位置,那么显然我们需要加入一个 b_j\le i<a_j 的人才能使其满足条件,而对于这样的人,它们的 b 我们其实不关心的,而为了让其尽可能少的影响到后面的位置,我们肯定会选择这样的人中 a 最大的,使用一个堆维护即可。

时间复杂度 n\log n