/*
考慮維護兩個堆
乙個堆是大根堆,儲存1-x的元素
乙個堆是小根堆,儲存x+1-n的元素
對於乙個加入的元素y,考慮將其加入大根堆or小根堆?
如果y>mid,那麼將其加入小根堆(上面的堆)
如果y#include
#include
#include
using namespace std;
int t,pos,n,x,mid,sum;
int main()
if(x>mid)
qu2.push(x);
else
qu1.push(x);
if(qu1.size()-qu2.size()==2)
if(qu2.size()-qu1.size()==2)
if(i%2==1)
else}}
if(sum%10!=0)
printf("\n");
}return 0;
}
對頂堆的故事
總結 用大頂堆和小頂堆來實現,控制兩個堆的個數來實現將第幾個數暴露在兩個堆的中間,這樣就可以隨時輸出第幾個數,隨意以乙個頂堆的top 為標準,判斷下乙個數加在哪個堆裡,並時刻控制數量,這樣就可以將要求的第幾個數一直存疑兩個頂堆的top 之間。include include using namespa...
對頂堆學習筆記
處理動態中位數等問題,靈活運用了堆的性質,本質是維護兩個堆。大根堆 q 1 維護集合中較小值的部分的最大值。小根堆 q 2 維護集合中較大值的部分的最小值。注意到兩個堆中的元素各自是單調的,兩個堆間也是單調的。也就是說,q 1 中的任何乙個元素都不大於 q 2 中的任何乙個元素。那麼假設高度為權值,...
對頂堆學習筆記
演算法思想 一 問題 你需要維護乙個資料結構,支援以下操作 1.插入乙個數 2.查詢當前資料結構中的中位數 第k小數 k為定值 很多大佬應該一眼平衡樹了 平衡樹,不好寫!對頂堆,好寫!二 做法 以查詢中位數為準 我們考慮維護乙個小根堆和乙個大根堆,如圖 對頂 堆 令大根堆為s1,小根堆為s2 我們發...