P9843 [ICPC 2021 Nanjing R] Paimon Sorting
题目描述
派蒙刚刚发明了一种新的排序算法,看起来很像“冒泡排序”,但有一些不同之处。它接受一个长度为 $n$ 的从 1 开始索引的序列 $A$ 并对其进行排序。其伪代码如下所示。
```cpp
// 排序算法
SORT(A)
for i from 1 to n // n 是 A 中元素的数量
for j from 1 to n
if a[i] < a[j] // a[i] 是 A 中的第 i 个元素
Swap a[i] and a[j]
```
如果你不相信这段算法可以对一个序列进行排序,你的任务就是证明它。无论如何,问题如下:
给定一个整数序列 $A = a_1, a_2, \cdots, a_n$,对于其每个长度为 $k$ 的前缀 $A_k$(即,对于每个 $1 \le k \le n$,考虑子序列 $A_k = a_1, a_2, \cdots, a_k$),计算调用 $\text{SORT}(A_k)$ 时执行的交换次数。
输入格式
有多个测试用例。输入的第一行包含一个整数 $T$,表示测试用例的数量。对于每个测试用例:
第一行包含一个整数 $n$ ($1 \le n \le 10^5$),表示序列的长度。
第二行包含 $n$ 个整数 $a_1, a_2, \cdots, a_n$ ($1 \le a_i \le n$),表示给定的序列。
保证所有测试用例的 $n$ 之和不超过 $10^6$。
输出格式
对于每个测试用例,输出一行,包含 $n$ 个用空格分隔的整数 $s_1, s_2, \cdots, s_n$,其中 $s_i$ 是调用 $\text{SORT}(A_i)$ 时执行的交换次数。
请不要在每行的末尾输出多余的空格,否则你的解答可能会被判为错误!
说明/提示
题面翻译由 ChatGPT-4o 提供。