堆模板

【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 }

 

转载于:https://www.cnblogs.com/Willendless/p/9416242.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值