堆模板

Posted willendless

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了堆模板相关的知识,希望对你有一定的参考价值。

【emmm】

    堆其实就是一个完全二叉树:叶子节点都在最后两层且集中在左侧。大(小)根堆的定义就是:每一个节点的权值大于等于(小于等于)其左右儿子(若存在)。

    支持的操作有:

        插入

        删除(根节点或者非根节点)

        查询根的权值

【代码】

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int heap[100010],tot;
 4 void up(int p)
 5 {
 6     while(p>1)
 7         if(heap[p]>heap[p/2]) 
 8             swap(heap[p],heap[p/2]), p/=2;
 9         else break;
10 }
11 void Insert(int val)
12 {
13     heap[++tot]=val;
14     up(tot);
15 }
16 void down(int p)
17 {
18     int s=p*2;
19     while(s<=tot) {
20         if(s<tot&&heap[s]<heap[s+1]) s++;
21         if(heap[s]>heap[p]) swap(heap[s],heap[p]),p=s,s*=2;
22         else break;
23     }
24 }
25 void Extract()
26 {
27     heap[1]=heap[n--];
28     down(1);
29 }
30 void Remove(int p)
31 {
32     heap[p]=heap[n--];
33     up(p),down[p];
34 }

 

以上是关于堆模板的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段2——.vue文件的模板

VSCode自定义代码片段(vue主模板)

Eclipse 中的通用代码片段或模板

调用模板化成员函数:帮助我理解另一个 *** 帖子中的代码片段

vscode代码片段生成vue模板

xml Eclipse模板(代码片段)检查参数并最终抛出IllegalArgumentException