b618: 排序 (sort) [數據減弱版]
Tags :
Accepted rate : 0人/0人 (0%) [非即時]
評分方式:
Tolerant

最近更新 : 2026-02-08 12:20

Content

注意:原題共有 25 組測試數據,但在此只使用前 14 組。

小 F 是一位 OI 新手。有一天,他學會了使用 C++ 內置的 sort 函數對一個整數序列從小到大排序。
他很好奇這個函數到底是如何運作的,於是他請教了小 L。小 L 也不太清楚,於是他介紹了兩種對一個長度為 n 的整數序列進行排序的方法:
• 插入排序:把序列分為未排序部分和已排序部分。起初,已排序部分有且僅有一個元素 (在本題默認是序列的第一個元素),未排序部分則包含其他元素。接下來進行 n-1 次操作。對於每次操作,從未排序部分取出一個元素 (在本題默認是未排序部分的第一個元素),然後到已排序部分找出一個位置並把它插入,使得那個部分是有序的。若有多個位置滿足條件,應選擇最前的一個位置。完成操作後,已排序部分即為排序的結果。
• 桶排序:記下序列中每個數的出現次數。具體地,令正整數 i 在序列的出現次數為 C[i]。按順序把 C[1]1C[2]2C[3]3、…、C[k]k 放到序列 a 的右端 (a 初始為空)。其中 k 是序列的最大值。則 a 即為排序的結果 (這個方法只適用於正整數序列)
小 F 現在有一個長度為 n 的整數序列 a,接下來他寫下了一個正整數 m
他希望你對這個序列使用小 L 介紹的兩種方法排序。記排序後的序列為 a'。同時,為了更清楚地了解這兩種排序方法,他要求你按以下格式說明排序的過程:
• 若 m=1,則你需要回答插入排序的過程。對於第 i 次操作,你需要回答一個整數 p[i],表示該元素被插入到已排序部分後是第 p[i] 個元素。
• 若 m=2,則你需要回答 C[1],C[2],C[3],…,C[k] 當中的其中一些數值。(小 F 保證此時它給你的序列 a 是正整數序列)

Input

你需要在標準輸入 (stdin) 讀入數據。
本題有多組測試數據。
輸入的第一行包含一個正整數 T,表示測試數據組數。
對於每組測試數據:
• 第一行包含兩個正整數 n,m,以空格分隔。
• 第二行包含 n 個整數 a[1],a[2],a[3],…,a[n],以空格分隔。

Output

你需要在標準輸出 (stdout) 輸出答案。
對於每組測試數據:
• 第一行輸出 n 個整數 a'[1],a'[2],a'[3],…,a'[n],以空格分隔。
• 若 m=1,第二行輸出 n-1 個整數 p[1],p[2],p[3],…,p[n-1],以空格分隔。
• 若 m=2,接下來按 i 的數值從小到大的順序輸出若干行,每行包含兩個整數 i,C[i],以空格分隔。特別地,你不需要也不應該輸出 C[i]=0 時的數值。

Sample Input #1
2
5 1
4 2 8 1 8
5 2
2 2 8 2 8
Sample Output #1
1 2 4 8 8
1 3 1 4
2 2 2 8 8
2 3
8 2
測資資訊:
記憶體限制: 512 MB
公開 測資點#0 (7%): 1.0s , <1M
公開 測資點#1 (7%): 1.0s , <1M
公開 測資點#2 (7%): 1.0s , <1M
公開 測資點#3 (7%): 1.0s , <1M
公開 測資點#4 (7%): 1.0s , <1M
公開 測資點#5 (7%): 1.0s , <1M
公開 測資點#6 (7%): 1.0s , <1M
公開 測資點#7 (7%): 1.0s , <1M
公開 測資點#8 (7%): 1.0s , <1M
公開 測資點#9 (7%): 1.0s , <1M
公開 測資點#10 (7%): 1.0s , <1M
公開 測資點#11 (7%): 1.0s , <1M
公開 測資點#12 (8%): 1.0s , <1M
公開 測資點#13 (8%): 1.0s , <1M
Hint :

【樣例1 解釋】
有兩組數據,在此只解釋第一組。
對於第一組數據:插入排序的過程如下表所示。

【數據範圍】
對於所有測試數據,保證:
T≤20
n≤100
m≤2
• 對於所有滿足 1≤i≤n 的整數 i-10100≤a[i]≤10100
• 若 m=2,則對於所有滿足 1≤i≤n 的整數 ia[i]≥1

特殊性質 A:對於所有滿足 1≤i≤n 的整數 ia[i]≥0
特殊性質 B:對於所有滿足 1≤i≤n 的整數 ia[i]<0

Tags:
出處:
[管理者:
ricky (電腦黃)
]


ID User Problem Subject Hit Post Date
沒有發現任何「解題報告」