STL

include<queue>

priority_queue<int> q; 大根堆

priority_queue<int,vector<int>,greater<int> > q; 小根堆

手写

然而并不比stl快

int heap[MAX],size;

void _push(int v)
{
    int now;
    heap[++size]=v;
    now=size;
    while(now)
    {
        int next=now>>1;
        if(heap[next]>heap[now])
            swap(heap[next],heap[now]);
        else
            break;
        now=next;
    }
}

int _top()
{
    return heap[1];
}

void _pop()
{
    int now=1;
    swap(heap[1],heap[size--]);
    while((now<<1)<=size)
    {
        int next=now<<1;
        if(next+1<=size&&heap[next+1]<heap[next])
        next++;
        if(heap[next]<heap[now])
        swap(heap[next],heap[now]);
        else
            break;
        now=next;
    }
}
posted @ 2019-11-14 10:42  nenT  阅读(140)  评论(0编辑  收藏  举报