【题解】ARC073E 极差 二分答案

只会暴躁做法。会不了一点贪心。

分出来的两侧的 $\max,\min$ 一定会包含全局 $\max,\min$,所以考虑全局 $\min,\max$ 的情况。

全局 $\min,\max$ 不在同一侧

考虑这个时候将每个二元组较小的那个与 $\min$ 放在一起,较大的那个与 $\max$ 放在一起一定最优,如果交换两个一定不可能是代价变得更小,只会是两侧的极差都变大。

全局 $\min,\max$ 在同一侧

这个时候这一侧的 $\max - \min$ 已经是定值了,我们只需要最小化另一侧的极差,现在就变成了如下问题:

每个位置有两种选择 $a_i,b_i$,必须选择二者之一并加入集合中,最小化集合的极差。

考虑二分答案并进行检查,假设目前要检验答案 $d$,我们有一种暴力的做法就是枚举 $l$,然后检查是否所有选项都有一者在 $[l,l+d]$ 里,考虑优化这个过程:对于一组 $a_i,b_i$,考虑可行的 $l$ 是区间 $[a_i-d,a_i]\cup[b_i-d,b_i]$,对这些位置加上 $1$,我们可以求出每个位置可以满足多少个 $i$ 的要求,然后检查一下是否存在一个位置可以满足所有 $i$ 的要求即可。

将区间加拆成端点处加减,不用离散化直接排个序做即可。

瓶颈在每次二分里的排序,复杂度 $O(n\log n\log w)$,可以通过预先排序并归并做到 $O(n(\log n + \log w))$,但是没必要。

代码

posted @ 2023-11-15 20:42  寂静的海底  阅读(1)  评论(0编辑  收藏  举报  来源