堆就是一顆二叉樹,滿足父親節點總是比兒子節點大(小)。因此,堆也分為大根堆和小根堆,大根堆就是父親節點比兒子節點大,小根堆正好相反。注意加粗的地方,是每乙個節點哦!!!!!
還是直接看例題吧,這樣講起來更加生動。
上題:【模板】堆
解析:這道題明顯就是乙個小根堆,那,怎麼實現呢?熱愛陣列的我選擇了陣列實現明明就是指標不會。
操作1:新增乙個數字
這裡需要用到兩個函式,乙個insert函式,用來插入,乙個ufix函式,用來更新。
void ufix(int i)
}void insert(int x)
操作2:輸出最小的數字(也就是堆頂)
直接輸出堆頂就行了qwq。
if(x == 2) cout << h[1] << endl;
操作3:刪除最小的數字(也就是堆頂)
這裡也需要兩個函式,乙個delet函式,用來刪除,乙個dfix函式,用來更新。
void dfix(int i)
}void delet()
完整**
#include using namespace std;
int n , tot = 0;
int h[1000010];
void ufix(int i)
}void dfix(int i)
}void insert(int x)
void delet()
int main()else if(x == 2) cout << h[1] << endl;
else delet();
} return 0;
}
其實優先佇列可以直接a的(其內部就是堆實現嘛),但是自己手寫一遍可以加深理解哦。 洛谷P3378 模板 堆
洛谷p3378 輸入樣例 51 2152 32輸出樣例 25ac include using namespace std const int maxn 1e6 5 int heap maxn int ind 0 void insertheap 自下向上調整堆,因為除新加的結點外符合小根堆定義 ret...
洛谷 P3378 模板 堆
如題,初始小根堆為空,我們需要支援以下3種操作 操作1 1 x 表示將x插入到堆中 操作2 2 輸出該小根堆內的最小數 操作3 3 刪除該小根堆內的最小數 輸入格式 第一行包含乙個整數n,表示操作的個數 接下來n行,每行包含1個或2個正整數,表示三種操作,格式如下 操作1 1 x 操作2 2 操作3...
洛谷 P3378 模板 堆
然後稍微科普一下stl哦 在queue裡面有乙個叫做priority queue 優先佇列 初始化狀態為大根堆,經過這樣的操作可以變為小根堆 priority queue greater q 需要注意的是在greater 該括號與後面那個括號不能夠連在一起,否則會報錯,因為 或者可以不這樣做,直接用...