ACM模板——堆操作集合
()); for(int i=0;i
()); for(int i=0;i
发布日期: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
转载地址:https://lux-sun.blog.csdn.net/article/details/82526775 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月24日 16时23分39秒