采用结构体写法,可以方便的修改结构体维护的数据结构以及排序的规则

#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()
{

}