binary_heap
作者:
朱颜
,
2023-05-15 20:47:23
,
所有人可见
,
阅读 205
const size_t N = 10050;
int heap[N];
#define cnt (*heap)
void push(int x){
if (cnt == N - 1) return;
size_t hole = ++cnt;
while(hole != 1 && heap[hole>>1] >= x){
heap[hole] = heap[hole>>1];
hole >>= 1;
}
heap[hole]=x;
}
void percolate_down(size_t hole){
int tmp = heap[hole], child;
while((child = hole << 1) <= cnt){
if(child != cnt && heap[child] > heap[child+1]) ++child;
if(heap[child] < tmp){
heap[hole] = heap[child];
hole = child;
} else break;
}
heap[hole] = tmp;
}
void pop(){
if(cnt == 0) return;
heap[1] = heap[cnt--];
percolate_down(1);
}
void build_heap(){
for(int i = cnt >> 1; i; --i){
percolate_down(i);
}
}
size_t size(){
return cnt;
}
#undef cnt