ACM模板——堆操作集合
发布日期:2021-06-30 23:44:01 浏览次数:2 分类:技术文章

本文共 1622 字,大约阅读时间需要 5 分钟。

手写版: 

/* 以下为 min heap 为例 */#include
#include
#define mem(a,b) memset(a,b,sizeof a)#define ssclr(ss) ss.clear(), ss.str("")#define INF 0x3f3f3f3f#define MOD 1000000007using namespace std;typedef long long ll;const int maxn=1e4+10;int a[maxn], b[maxn], len, k;void shift_up(int i){ while((i>>1)>=1) { if(a[i]
>1]) swap(a[i],a[i>>1]); else return; i>>=1; }}void shift_down(int i){ int t; while((i<<1)<=len) { t=i<<1; if(t
a[t+1]) t++; if(a[t]
>1)>=1) { p=i>>1, l=p<<1, cid=l; if(l+1<=len) { r=l+1; if(a[r]
0) { b[k++]=heap_top(); heap_pop(); }}int main(){ int n,num; scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&num), heap_push(num); // 边插边建 for(int i=1;i<=len;i++) printf("%d ",a[i]); puts(""); for(int i=1;i<=n;i++) scanf("%d",&a[++len]); heap_build(); // 插完再建 for(int i=1;i<=len;i++) printf("%d ",a[i]); puts(""); heap_sort(); for(int i=0;i

 

STL版: 

#include
#include
#define mem(a,b) memset(a,b,sizeof a)#define ssclr(ss) ss.clear(), ss.str("")#define INF 0x3f3f3f3f#define MOD 1000000007using namespace std;typedef long long ll;vector
v, v1;int main(){ int n,a; scanf("%d",&n); // 边插边建 for(int i=1;i<=n;i++) scanf("%d",&a), v.push_back(a), make_heap(v.begin(),v.end(),greater
()); // make_heap or push_heap for(int i=0;i
()); for(int i=0;i
()); for(int i=0;i
()); v.pop_back(); for(int i=0;i

 

转载地址:https://lux-sun.blog.csdn.net/article/details/82526775 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Win软件 - PotPlayer
下一篇:堆 - 基础篇

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月24日 16时23分39秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章