【POJ3784】Running Median(中位數,對頂堆)
description
輸入M個數,當已輸入的個數為奇數個時輸出此時的中位數。
一共有M/2+1箇中位數要輸出,每一行10個。
solution
維護兩個優先佇列。
大根堆q1維護比當前中位數小的元素。
小跟堆q2維護比當前中位數大的元素。
我們把中位數放在大根堆q1的堆頂,於是有:
輸入的數為奇數個時:q1.size()=q2.size()+1
(多一箇中位數)
輸入的數為偶數個時:q1.size()=q2.size()
(不存在中位數)
codes
#include<iostream>
#include<queue>
using namespace std;
priority_queue<int>q1;//big
priority_queue<int,vector<int>,greater<int> >q2;
int main(){
int T; cin>>T;
while(T--){
while(q1.size())q1.pop();
while(q2.size())q2.pop();
int cas, n;
cin>>cas>>n;
cout<<cas<<' '<<(n+1)/2<<'\n';
for(int i = 1; i <= n; i++){
int x; cin>>x;
if(q1.empty())q1.push(x);
else{
if(x>q1.top())q2.push(x);
else q1.push(x);
}
while(q1.size()<q2.size()){
q1.push(q2.top()); q2.pop();
}
while(q1.size()>q2.size()+1){
q2.push(q1.top()); q1.pop();
}
if(i&1)cout<<q1.top()<<' ';
if(!(i%20))cout<<'\n';
}
cout<<'\n';
}
}
相關文章
- 1002 Running Median
- 「筆記」對頂堆動態維護中位數筆記
- vertica 中位數函式 MEDIAN 的使用函式
- 普通對頂堆
- leetcode 4. Median of Two Sorted Arrays 尋找兩個正序陣列的中位數(困難)LeetCode陣列
- 大頂堆的python實現Python
- 堆溢位之OverlappingAPP
- 記憶體中發堆和棧,棧是執行時的單位,而堆是儲存的單位記憶體
- 7.17 APPROX_MEDIANAPP
- 均值、中位數、眾數
- N1CTF2018 shopping:多執行緒堆題中堆溢位的應用TF2執行緒
- 對十進位制數字的按位輸出,取反,並求其位數
- Linux kernel 堆溢位利用方法Linux
- StackOverflowError堆疊溢位錯誤Error
- 堆溢位的unlink利用方法
- 堆溢位學習筆記筆記
- P2201 數列編輯器(對頂棧)
- 【RTOS】FreeRTOS中的任務堆疊溢位檢測機制
- 圖解大頂堆的構建、排序過程圖解排序
- Linux kernel 堆溢位利用方法(三)Linux
- Linux kernel 堆溢位利用方法(二)Linux
- Linux堆溢位漏洞利用之unlinkLinux
- C++輸入十進位制數,輸出對應二進位制數、十六進位制數C++
- Leetcode 4 Median of Two Sorted ArraysLeetCode
- 資料流中的中位數
- mysql 求分組中位數、環比、同比、中位數的環比、同比MySql
- 阿里大佬講解Java記憶體溢位示例(堆溢位、棧溢位)阿里Java記憶體溢位
- LeetCode 4. Median of Two Sorted ArraysLeetCode
- Sql 查詢 置頂、排序,置頂和非置頂為不同的排序欄位SQL排序
- Redis 報”OutOfDirectMemoryError“(堆外記憶體溢位)RedisError記憶體溢位
- 堆疊溢位報錯引發的思考
- 1202-資料流中的中位數
- P1168 中位數題解
- PAT-B 1021 個位數統計【對映】
- 如何應對 RocketMQ 訊息堆積MQ
- 對於十進位制數 -1023,包含符號位在內,至少需要多少個二進位制位表示該數符號
- .NET8頂級除錯lldb觀察FOH堆字串分配除錯LLDB字串
- 影像主題顏色提取(Median cut)