Binary Heap
Jump to navigation
Jump to search
Priority Queue
#include<stdio.h> int pq[100000],n; int cmd; int main(){ while(true){ scanf("%d",&cmd); // cmd = 0 : push / cmd = 1 : top / cmd = 2 : pop / cmd = 3 : end if(cmd == 0){ // push scanf("%d",&pq[n]); int pos = n; while(pos>0 && pq[pos] > pq[(pos-1)/2]){ int t = pq[pos]; pq[pos] = pq[(pos-1)/2]; pq[(pos-1)/2] = t; pos = (pos-1)/2; } n++; }else if(cmd == 1){ // top if(n==0) printf("NO DATA\n"); else printf("TOP : %d\n",pq[0]); }else if(cmd == 2){ // pop if(n==0) continue; pq[0] = pq[n-1]; n--; int pos = 0,newpos; while(true){ newpos = -1; if(2*pos+1 >= n) break; if(pq[pos] < pq[2*pos+1]) newpos = 2*pos+1; if(2*pos+2 < n && pq[pos] < pq[2*pos+2] && pq[2*pos+2] > pq[2*pos+1]) newpos = 2*pos+2; if(newpos == -1) break; int t = pq[pos]; pq[pos] = pq[newpos]; pq[newpos] = t; pos = newpos; } //printf("n = %d\n",n); }else break; } }