堆
堆
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;
}
}