CF1995E2.Let Me Teach You a Lesson (Hard Version)

省选/NOI-

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

这是一个难度较高的版本。与简单版本的唯一区别在于 tt 和 nn 的约束条件。只有当你同时解决了两个版本的问题时,才能进行 hack。

Arthur 正在给他著名的 2n2n 位骑士上课。和其他学生一样,他们成对坐在桌前,但出于习惯,他们是围成一个圆圈坐的。第 2i−12i-1 位骑士和第 2i2i 位骑士坐在同一张桌子上。

每位骑士都有一个智力值,用整数表示。我们用 aia_i 表示第 ii 位骑士的智力值。Arthur 希望所有桌子的总智力值的最大差值尽可能小。更正式地说,他希望最小化 max⁡1≤i≤n(a2i−1+a2i)−min⁡1≤i≤n(a2i−1+a2i)\max\limits_{1 \le i \le n} (a_{2i-1} + a_{2i}) - \min\limits_{1 \le i \le n} (a_{2i-1} + a_{2i})。

然而,骑士守则只允许交换圆圈中相对位置的骑士,也就是说,Arthur 可以同时执行 ai:=ai+na_i := a_{i+n},ai+n:=aia_{i+n} := a_i,其中 1≤i≤n1 \le i \le n。Arthur 可以进行任意次数这样的交换。请问他能达到的最小差值是多少?

输入格式

每组测试数据包含若干个测试用例。第一行包含一个整数 tt(1≤t≤10 0001 \le t \le 10\,000),表示测试用例的数量。接下来是每个测试用例的描述。

每个测试用例的第一行包含一个整数 nn(1≤n≤100 0001 \le n \le 100\,000),表示桌子的数量。

第二行包含 2n2n 个整数 a1,a2,…,a2na_1, a_2, \ldots, a_{2n}(1≤ai≤1091 \le a_i \le 10^9),表示每位骑士的智力值。

保证所有测试用例中 nn 的总和不超过 100 000100\,000。

输出格式

对于每个测试用例,输出一行一个整数,表示 Arthur 能达到的最小差值。

输入输出样例

  • 输入#1

    5
    2
    6 6 4 4
    1
    10 17
    3
    1 10 1 10 1 10
    3
    3 3 4 5 5 4
    5
    1 2 3 4 5 6 7 8 9 10

    输出#1

    0
    0
    0
    2
    4

说明/提示

在第一个测试用例中,Arthur 可以交换第 22 位和第 44 位骑士。这样两张桌子的总智力值都是 1010。

在第三个测试用例中,Arthur 不需要进行任何操作,每张桌子的总智力值都是 1111。

在第四个测试用例中,Arthur 可以交换编号为 22 和 55 的骑士,得到的差值为 22。可以证明无法取得更优的结果。

由 ChatGPT 4.1 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页