CF2023A.Concatenation of Arrays

普及-

通过率:0%

AC君温馨提醒

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

题目描述

给定 nn 个数组 a1,…,ana_1, \ldots, a_n,每个数组的长度均为 22,即 ai=[ai,1,ai,2]a_i = [a_{i,1}, a_{i,2}]。你需要将这些数组按某种顺序拼接成一个长度为 2n2n 的数组,使得最终数组中的逆序对数 †^\dagger 最小。注意,你不需要实际计算逆序对的数量。

更正式地说,你需要选择一个长度为 nn 的排列 ‡^\ddagger pp,使得数组 b=[ap1,1,ap1,2,ap2,1,ap2,2,…,apn,1,apn,2]b = [a_{p_1,1}, a_{p_1,2}, a_{p_2,1}, a_{p_2,2}, \ldots, a_{p_n,1}, a_{p_n,2}] 的逆序对数尽可能少。

†^\dagger 一个数组 cc 的逆序对数是指满足 i<ji < j 且 ci>cjc_i > c_j 的下标对 (i,j)(i, j) 的数量。

‡^\ddagger 长度为 nn 的排列是指由 11 到 nn 的 nn 个不同整数按任意顺序组成的数组。例如,[2,3,1,5,4][2,3,1,5,4] 是一个排列,但 [1,2,2][1,2,2] 不是(22 出现了两次),[1,3,4][1,3,4] 也不是(n=3n=3 但数组中有 44)。

输入格式

每个测试点包含多组测试用例。第一行包含一个整数 tt(1≤t≤1041 \le t \le 10^4),表示测试用例的数量。

每个测试用例的第一行包含一个整数 nn(1≤n≤1051 \le n \le 10^5),表示数组的数量。

接下来的 nn 行,每行包含两个整数 ai,1a_{i,1} 和 ai,2a_{i,2}(1≤ai,j≤1091 \le a_{i,j} \le 10^9),表示第 ii 个数组的两个元素。

保证所有测试用例中 nn 的总和不超过 10510^5。

输出格式

对于每个测试用例,输出 2n2n 个整数,表示你得到的数组的元素。如果有多种方案,输出任意一种均可。

输入输出样例

  • 输入#1

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

    输出#1

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

说明/提示

在第一个测试用例中,我们按顺序 2,12, 1 拼接数组,得到的数组 b=[2,3,1,4]b = [2, 3, 1, 4],其逆序对如下:

  • i=1i = 1,j=3j = 3,因为 b1=2>1=b3b_1 = 2 > 1 = b_3;
  • i=2i = 2,j=3j = 3,因为 b2=3>1=b3b_2 = 3 > 1 = b_3。

因此,逆序对数为 22。可以证明这是最小的逆序对数。

在第二个测试用例中,我们按顺序 3,1,23, 1, 2 拼接数组,得到 b=[2,1,3,2,4,3]b = [2, 1, 3, 2, 4, 3],其逆序对如下:

  • i=1i = 1,j=2j = 2,因为 b1=2>1=b2b_1 = 2 > 1 = b_2;
  • i=3i = 3,j=4j = 4,因为 b3=3>2=b4b_3 = 3 > 2 = b_4;
  • i=5i = 5,j=6j = 6,因为 b5=4>3=b6b_5 = 4 > 3 = b_6。

因此,逆序对数为 33。可以证明这是最小的逆序对数。

在第三个测试用例中,我们按顺序 4,2,1,5,34, 2, 1, 5, 3 拼接数组。

由 ChatGPT 4.1 翻译

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

首页