依次讀入乙個整數序列,每當已經讀入的整數個數為奇數時,輸出已讀入的整數構成的序列的中位數。
輸入格式
第一行輸入乙個整數p
'>p
p,代表後面資料集的個數,接下來若干行輸入各個資料集。
每個資料集的第一行首先輸入乙個代表資料集的編號的整數。
然後輸入乙個整數m
'>m
m,代表資料集中包含資料的個數,m
'>m
m一定為奇數,資料之間用空格隔開。
資料集的剩餘行由資料集的資料構成,每行包含10個資料,最後一行資料量可能少於10個,資料之間用空格隔開。
輸出格式
對於每個資料集,第一行輸出兩個整數,分別代表資料集的編號以及輸出中位數的個數(應為資料個數加一的二分之一),資料之間用空格隔開。
資料集的剩餘行由輸出的中位數構成,每行包含10個資料,最後一行資料量可能少於10個,資料之間用空格隔開。
輸出中不應該存在空行。
資料範圍1≤
p≤1000
'>1≤p≤1000
1≤p≤1000,1≤
m≤9999
'>1≤m≤9999
1≤m≤9999
輸入樣例:
3
1 9
1 2 3 4 5 6 7 8 9
2 9
9 8 7 6 5 4 3 2 1
3 23
23 41 13 22 -3 24 -31 -11 -8 -7
3 5 103 211 -311 -45 -67 -73 -81 -99
-33 24 56
輸出樣例:1 5
1 2 3 4 5
2 59 8 7 6 5
3 12
23 23 22 22 13 3 5 5 3 -3
-7 -3
演算法:對頂堆
題解:此題是找動態中位數,就是說沒輸出n個數,n代表奇數,就輸出其中的中位數。需要用到堆這個資料結構,需要建立兩個堆,乙個堆是從小到大,是表示從中位數開始到最後的範圍;乙個堆是從大到小,就是從開始到中位數前乙個的範圍。利用這兩個堆相互補對方的不足,然後得出每次的結果。
#include #include#include
#include
#include
using
namespace
std;
intmain()
else
else
if(q1.size() if(q1.size() > q2.size() + 1
) }
if(i & 1
) else}}
if(cnt % 10 != 0
) }
return0;
}
acwing106 動態中位數
依次讀入乙個整數序列,每當已經讀入的整數個數為奇數時,輸出已讀入的整數構成的序列的中位數。輸入格式 第一行輸入乙個整數p,代表後面資料集的個數,接下來若干行輸入各個資料集。每個資料集的第一行首先輸入乙個代表資料集的編號的整數。然後輸入乙個整數m,代表資料集中包含資料的個數,m一定為奇數,資料之間用空...
動態中位數
178.動態中位數 統計描述 提交自定義測試 題目描述 輸入n個32位有符號整數,當已輸入的個數為奇數個時,輸出此時的中位數。輸入描述 第一行乙個整數n 第二行n個32位有符號整數。輸出描述 輸出一行,n 2 上取整 個中位數,中間用空格隔開。對於 40 資料 n 1000 對於所有資料 n 100...
動態中位數
依次讀入乙個整數序列,每當已經讀入的整數個數為奇數時,輸出已讀入的整數構成的序列的中位數。輸入格式 第一行輸入乙個整數p,代表後面資料集的個數,接下來若干行輸入各個資料集。每個資料集的第一行首先輸入乙個代表資料集的編號的整數。然後輸入乙個整數m,代表資料集中包含資料的個數,m一定為奇數,資料之間用空...