int heap_size,heap[100010];
void add(int d){
heap[++heap_size]=d;
int son=heap_size;
while(son>1){
int fa=son>>1;
if(heap[son]>=heap[fa]) break;
swap(heap[son],heap[fa]);
son=fa;
}
}
void cut(){
int res=heap[heap_size];
heap[1]=res;
heap_size--;
int fa=1;
while(fa*2<=heap_size){
int son=fa*2;
if(son<heap_size&&heap[son+1]<heap[son]) son++;
if(heap[fa]<=heap[son]) break;
swap(heap[fa],heap[son]);
fa=son;
}
}
最小堆
最新推荐文章于 2022-03-18 15:56:51 发布