题意解析
犹豫只能操作一次,所以我们可以枚举被替换的元素 AiA_iAi 。统计未替换时,AAA 和 BBB 的绝对差值和 sum\tt{sum}sum,然后记录枚举 AiA_iAi 的过程中替换后可以减少的差值的最大值 maxDiff\tt{maxDiff}maxDiff,最后的答案即为 sum−maxDiff\tt{sum - maxDiff}sum−maxDiff。
接下来我们考虑如果快速求出对于每个 AiA_iAi 的 diff\tt{diff}diff。要想最小化 Ai−BiA_i - B_iAi −Bi ,那么我们可以在数组 CCC 中找到一个最接近 BiB_iBi 的数字。
使用二分查找在数组 CCC 中,第一个大于 BiB_iBi 的元素下标 jjj,那么此时 Cj−1 (1≤j−1<N)C_{j-1}\ (1 \le j - 1 < N)Cj−1 (1≤j−1<N) 为最后一个小于等于 BiB_iBi 的数字。此时与 BiB_iBi 的差最小的元素,为其中一个,取最小值即可。
AC 代码
复杂度分析
对于每个 AiA_iAi 使用二分查找数组 CCC 中最接近 BiB_iBi 的数字,时间复杂度为 O(logN)\mathrm{O}(\log{N})O(logN),总的时间复杂度为 O(NlogN)\mathrm{O}(N\log{N})O(NlogN)。