采用结构体写法,可以方便的修改结构体维护的数据结构以及排序的规则
#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()
{
} 

京公网安备 11010502036488号