動態維護中位數問題,可以用堆,樹狀陣列,線段樹等資料結構解決
堆,可以用來進行插入,查詢最值,刪除最值等操作
對頂堆:一大根堆和一小根堆,大根堆維護最小值,小根堆維護最大值。
洛谷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...