采用结构体写法,可以方便的修改结构体维护的数据结构以及排序的规则
#include<stdio.h> const int N=1e5+5; struct heap { long long num[N]; int size; }A; inline int parent(int x) { return x>>1; } inline int left(int x) { return x<<1; } inline int right(int x) { return (x<<1)+1; } void max_heapify(heap &A,int i)//单行程维护堆性质 { int l=left(i),r=right(i),largest; if(l<=A.size&&A.num[l]>A.num[i]) largest=l; else largest=i; if(r<=A.size&&A.num[r]>A.num[largest]) largest=r; if(largest!=i) { long long t=A.num[i]; A.num[i]=A.num[largest]; A.num[largest]=t; max_heapify(A,largest); } } void build_heap(heap &A,int n)//建优先队列 { A.size=n; for(int i=A.size>>1;i>=1;i--) max_heapify(A,i); } long long heap_max(heap &A)//返回优先队列队首元素 { return A.num[1]; } long long heap_extract(heap &A)//删除并返回队首元素 { if(A.size<1) return -1; long long t=A.num[1]; A.num[1]=A.num[A.size]; A.size--; max_heapify(A,1); return t; } void heap_increase_key(heap &A,int i,long long c) { if(c<A.num[i]) return ; A.num[i]=c; while(i>1&&A.num[parent(i)]<A.num[i]) { int t=A.num[parent(i)]; A.num[parent(i)]=A.num[i]; A.num[i]=t; i=parent(i); } } void heap_insert(heap &A,long long c)//insert { A.size++; A.num[A.size]=-1e17; heap_increase_key(A,A.size,c); } int main() { }