資料結構綜合應用 堆

2021-10-14 01:47:55 字數 971 閱讀 8789

動態維護中位數問題,可以用堆,樹狀陣列,線段樹等資料結構解決

堆,可以用來進行插入,查詢最值,刪除最值等操作

對頂堆:一大根堆和一小根堆,大根堆維護最小值,小根堆維護最大值。

洛谷1168

題意:每輸入奇數個數字,實時輸出中位數

解題思路:

定義乙個對頂堆,輸入第乙個數字,並作為中位數輸出,

每輸入乙個數字,大於中位數就插入小根堆;小於等於中位數就插入大根堆

當輸入奇數個數字時,維護兩堆的平衡,找到中位數並輸出。

#include

using

namespace std;

priority_queue<

int, vector<

int>

, less<

int>

> q1;

//大根堆,基礎型別預設是大根堆,預設是less

priority_queue<

int, vector<

int>

, greater<

int>

>q2;

//小根堆

intmain()

else

} cout << mid << endl;}}

return0;

}

學習:

優先佇列實現堆的資料結構,first in, largest out的行為特徵和操作方法

priority_queue

type:資料型別

container:容器型別,(container必須是用陣列實現的容器,比如vector, deque等等,但不能用 list。stl裡面預設用的是vector)

functional 是比較方式

「高階演算法」專欄(目錄)

資料結構綜合應用 堆

學習 priority queue 基礎型別預設是大根堆,全的寫法是priority queue 洛谷 2827 題意過程描述 變數sig記錄經過時間增加的長度 找到最值 切成兩半 插入新產生的兩個值 sig記錄增加的長度 80分 include using namespace std priori...

資料結構 堆的應用

public class heap 插入操作的 public void insert int value count a count value 插入後,從節點開始從下往上開始堆化,插入 自下往上堆化 int i count while i 2 0 a i a i 2 public int remo...

資料結構 堆及堆的應用

堆是一種特殊的樹形結構,堆的把每乙個節點都有乙個值,我們通常所說的堆這種資料結構,指的就是二叉堆。其實它可以被看做乙個完全二叉樹。它的每個節點的子樹又可以被看做是堆。堆可以分為最大堆和最小堆 最大堆 每個父節點都大於孩子節點 最小堆 每個父節點都小於孩子節點 a 我們在定義堆的資料成員的時候,利用s...