中位數 (優先佇列)

2022-02-24 16:26:38 字數 603 閱讀 6027

這種題型比較常見,所以總結下來為妙。

一般暴力的方法是找到排乙個序,然後輸出中間點。

然後正解的方法是優先佇列。

乙個大根堆乙個小根堆,用於儲存中位數左邊的數和中位數右邊的數。

然後每一次插入某個數的時候,可以插入到中間,然後判斷左右兩個堆的大小,保持均等即可。

#include #include #include #include #include #include #include using namespace std;

void read(int &x)

while(s>='0'&&s<='9')

x*=f;

}int n,m;

int a[200000];

string mid="mid";

string add="add";

priority_queue,less>b;

priority_queue,greater>s;

int main()

while(ts-tb>=2)

} if(s==mid)

} return 0;

}

3871 中位數

中位數( 優先佇列較優處理 )

首先 不妨假設mid為最初的中位數,開乙個小根堆儲存 q1 mid 乙個大根堆儲存 q2 mid 當向堆中加入元素通過與mid比較 1 scanf d a i 2if a i mid q2.push a i 3else q1.push a i 當兩堆中元素個數不等的時候 就要維護mid肯定是多的元素...

動態求中位數 堆 優先佇列

堆是一種類似二叉樹的結構,分為小根堆和大根堆,小根堆是父節點的值比子節點小,大根堆是父節點的值比子節點大。堆是用陣列來實現的,0為根節點,每個結點的子節點下標為2 i 1和2 i 2 如果要保證堆的結構,需要 上浮 shift up 下沉 shift down 來維護,時間複雜度為log 有這樣一道...

資料流的中位數(優先佇列解決)

中位數是有序列表中間的數。如果列表長度是偶數,中位數則是中間兩個數的平均值。例如,2,3,4 的中位數是 3 2,3 的中位數是 2 3 2 2.5 設計乙個支援以下兩種操作的資料結構 示例 addnum 1 addnum 2 findmedian 1.5 addnum 3 findmedian 2...