Difference between revisions of "Binary Heap"
Jump to navigation
Jump to search
(Created page with "== Priority Queue == <pre> #include<stdio.h> int pq[100000],n; int cmd; int main(){ while(true){ scanf("%d",&cmd); // cmd = 0 : push / cmd = 1 : top / cmd = 2 : po...") |
(No difference)
|
Latest revision as of 00:11, 8 March 2019
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;
}
}