CF1844F2 Min Cost Permutation (Hard Version)

题目描述

本题与简单版本的唯一区别在于 $t$ 和 $n$ 的约束条件。 给定一个长度为 $n$ 的正整数数组 $a_1,\dots,a_n$,以及一个(可能为负数的)整数 $c$。 在数组 $a_1,\dots,a_n$ 的所有排列 $b_1,\dots,b_n$ 中,考虑最小化下式的值: $$ \sum_{i=1}^{n-1} |b_{i+1}-b_i-c| $$ 请找出能够取得该最小值的字典序最小的排列 $b$。 一个序列 $x$ 在字典序上小于序列 $y$ 当且仅当满足以下条件之一: - $x$ 是 $y$ 的前缀,且 $x \ne y$; - 在 $x$ 和 $y$ 第一个不同的位置,$x$ 的元素小于 $y$ 对应位置的元素。

输入格式

每组测试数据包含多组测试用例。第一行包含一个整数 $t$($1 \le t \le 10^4$),表示测试用例的数量。 每个测试用例的第一行包含两个整数 $n$ 和 $c$($1 \le n \le 2 \cdot 10^5$,$-10^9 \le c \le 10^9$)。 每个测试用例的第二行包含 $n$ 个整数 $a_1,\dots,a_n$($1 \le a_i \le 10^9$)。 保证所有测试用例中 $n$ 的总和不超过 $2 \cdot 10^5$。

输出格式

对于每个测试用例,输出 $n$ 个整数 $b_1,\dots,b_n$,即能够取得最小值 $\sum\limits_{i=1}^{n-1} |b_{i+1}-b_i-c|$ 的字典序最小的 $a$ 的排列。

说明/提示

在第一个测试用例中,可以证明 $\sum\limits_{i=1}^{n-1} |b_{i+1}-b_i-c|$ 的最小值为 $27$,排列 $b = [9,3,1,4,5,1]$ 是能够取得该最小值的字典序最小的排列:$|3-9-(-7)|+|1-3-(-7)|+|4-1-(-7)|+|5-4-(-7)|+|1-5-(-7)| = 1+5+10+8+3 = 27$。 在第二个测试用例中,$\sum\limits_{i=1}^{n-1} |b_{i+1}-b_i-c|$ 的最小值为 $0$,$b = [1,3,5]$ 是能够取得该最小值的字典序最小的排列。 在第三个测试用例中,只有一种排列 $b$。 由 ChatGPT 4.1 翻译