動態中位數
阿新 • • 發佈:2022-03-19
code
#include<iostream> #include<algorithm> #include<queue> #include<vector> #define fir(i,a,b) for(int i=a;i<=b;++i) using namespace std; priority_queue<int, vector<int>, greater<int> > q1, kong1; priority_queue<int> q2, kong2; void init() { int t, x, n, now; cin >> t; while (t--) { cin >> x >> n; //index of date set,number of date cout << x << ' ' << (n + 1) / 2 << '\n'; q1 = kong1, q2 = kong2; int cnt = 0; fir(i, 1, n) { cin >> now; if (q1.empty()) { q1.push(now); } else { if (now > q1.top()) { q1.push(now); } else { q2.push(now); } while (q1.size() < q2.size()) { q1.push(q2.top()); q2.pop(); } while (q1.size() > q2.size() + 1) { q2.push(q1.top()); q1.pop(); } } if (1 & i) {//output when odd index ++cnt; cout << q1.top() << ' '; if (!(cnt % 10)) { cout << '\n'; } } } if(cnt%10){ cout<<'\n'; } } } int main() { ios::sync_with_stdio(false); cin.tie(0); init(); return 0; }
quetion
動態中位數 題目 提交記錄 討論 題解 視訊講解 依次讀入一個整數序列,每當已經讀入的整數個數為奇數時,輸出已讀入的整數構成的序列的中位數。 輸入格式 第一行輸入一個整數 P,代表後面資料集的個數,接下來若干行輸入各個資料集。 每個資料集的第一行首先輸入一個代表資料集的編號的整數。 然後輸入一個整數 M,代表資料集中包含資料的個數,M 一定為奇數,資料之間用空格隔開。 資料集的剩餘行由資料集的資料構成,每行包含 10 個數據,最後一行資料量可能少於 10 個,資料之間用空格隔開。 輸出格式 對於每個資料集,第一行輸出兩個整數,分別代表資料集的編號以及輸出中位數的個數(應為資料個數加一的二分之一),資料之間用空格隔開。 資料集的剩餘行由輸出的中位數構成,每行包含 10 個數據,最後一行資料量可能少於 10 個,資料之間用空格隔開。 輸出中不應該存在空行。 資料範圍 1≤P≤1000, 1≤M≤99999, 所有 M 相加之和不超過 5×105。 輸入樣例: 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 5 9 8 7 6 5 3 12 23 23 22 22 13 3 5 5 3 -3 -7 -3