acwing106 動態中位數

2021-10-25 05:48:23 字數 1344 閱讀 3070

依次讀入乙個整數序列,每當已經讀入的整數個數為奇數時,輸出已讀入的整數構成的序列的中位數。

輸入格式

第一行輸入乙個整數p,代表後面資料集的個數,接下來若干行輸入各個資料集。

每個資料集的第一行首先輸入乙個代表資料集的編號的整數。

然後輸入乙個整數m,代表資料集中包含資料的個數,m一定為奇數,資料之間用空格隔開。

資料集的剩餘行由資料集的資料構成,每行包含10個資料,最後一行資料量可能少於10個,資料之間用空格隔開。

輸出格式

對於每個資料集,第一行輸出兩個整數,分別代表資料集的編號以及輸出中位數的個數(應為資料個數加一的二分之一),資料之間用空格隔開。

資料集的剩餘行由輸出的中位數構成,每行包含10個資料,最後一行資料量可能少於10個,資料之間用空格隔開。

輸出中不應該存在空行。

資料範圍

1 < p < 1000

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

維護兩個優先佇列,q1從小到大,q2從大到小,例如q1 = ,q2 = ,每次把乙個數放進去之後,維護一下數量,保持中位數在q1的頂端.

int cc,t,n;

int a[maxn]

;priority_queue<

int,vector<

int>

,greater<

int>

>q1;

//小根堆

priority_queue<

int>q2;

//大根堆

intmain()

while

(q1.

size()

> q2.

size()

+1)}

if(i &1)

}if(p %

10!=0)

printf

("\n");

}return0;

}

AcWing 106 動態中位數(對頂堆)

依次讀入乙個整數序列,每當已經讀入的整數個數為奇數時,輸出已讀入的整數構成的序列的中位數。輸入格式 第一行輸入乙個整數p p p,代表後面資料集的個數,接下來若干行輸入各個資料集。每個資料集的第一行首先輸入乙個代表資料集的編號的整數。然後輸入乙個整數m m m,代表資料集中包含資料的個數,m m m...

動態中位數

178.動態中位數 統計描述 提交自定義測試 題目描述 輸入n個32位有符號整數,當已輸入的個數為奇數個時,輸出此時的中位數。輸入描述 第一行乙個整數n 第二行n個32位有符號整數。輸出描述 輸出一行,n 2 上取整 個中位數,中間用空格隔開。對於 40 資料 n 1000 對於所有資料 n 100...

動態中位數

依次讀入乙個整數序列,每當已經讀入的整數個數為奇數時,輸出已讀入的整數構成的序列的中位數。輸入格式 第一行輸入乙個整數p,代表後面資料集的個數,接下來若干行輸入各個資料集。每個資料集的第一行首先輸入乙個代表資料集的編號的整數。然後輸入乙個整數m,代表資料集中包含資料的個數,m一定為奇數,資料之間用空...