10 16 對頂堆演算法研究(POJ 3784)

2022-07-21 05:21:16 字數 511 閱讀 1602

/*

考慮維護兩個堆

乙個堆是大根堆,儲存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 我們發...