#include <stdio.h>
#include <stdlib.h>
#define height 4
#define MAX (1<<height)
int t[MAX+1];
int sz = 0;
void swap(int *x, int *y){
int tmp = *x;
*x = *y;
*y = tmp;
}
void initTree(int n){
int i;
for(i=0;i<MAX;i++){
t[i] = -1;
}
}
void printA(){
int i;
for(i
=1;i
<=sz
;i
++) printf("%d ",t
[i
]); }
void printT(int i){
int x = i;
while(x/2!=0){
x/=2;
}
}
int goP(int i){
if(i/2 == 0) return 0;
else return i/2;
}
int goL(int i){
if(2*i >= MAX) return 0;
else return 2*i;
}
int goR(int i){
if(2*i+1 >= MAX) return 0;
else return 2*i+1;
}
void preOrder(int i){
if(t[i] == -1) return;
printT(i);
preOrder(goL(i));
preOrder(goR(i));
}
void inOrder(int i){
if(t[i] == -1) return;
inOrder(goL(i));
printT(i);
inOrder(goR(i));
}
void postOrder(int i){
if(t[i] == -1) return;
postOrder(goL(i));
postOrder(goR(i));
printT(i);
}
void insBT(int x){
int k,i = 1;
for(k=0;k<height;k++){
if(t[i]==-1){
t[i] = x;
sz++;
return;
}
if(x < t[i]) i = goL(i);
else i = goR(i);
}
printf("Error : too high -> %d\n",x
); }
int popHeap(){
int i = 1;
int l,r,ma;
int ret = t[i];
t[i] = t[sz]; //t[1] = t[sz]
t[sz--] = -1; //t[sz]=-1 をしてから sz=sz-1 の意味
while(i*2 <= sz){
l = goL(i);
r = goR(i);
if(t[l]<t[r]) ma = r;
else ma = l;
if(t[i] > t[ma]) break;
swap(&t[i],&t[ma]);
i = ma;
}
return ret;
}
void pushHeap(int x){
int i = ++sz;
int p;
if(i>=MAX-1) {
printf("Error : out size < %d -> %d\n",MAX
-1,i
); t[sz] = -1;
sz--;
return;
}
t[sz] = x;
while(1<i){
p = goP(i);
if(t[i] <= t[p]) return;
else swap(&t[i],&t[p]);
i = p;
}
}
int main(void){
int i,x,n;
initTree(n);
for(i=0;i<n;i++){
}
sz = n;
inOrder(1);
// pop
int a=popHeap();
inOrder(1);
a = popHeap();
inOrder(1);
pushHeap(100);
inOrder(1);
pushHeap(30);
inOrder(1);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KIAojZGVmaW5lIGhlaWdodCA0CiNkZWZpbmUgTUFYICgxPDxoZWlnaHQpCiAKaW50IHRbTUFYKzFdOwppbnQgc3ogPSAwOwogCnZvaWQgc3dhcChpbnQgKngsIGludCAqeSl7CiAgICBpbnQgdG1wID0gKng7CiAgICAqeCA9ICp5OwogICAgKnkgPSB0bXA7Cn0KIAp2b2lkIGluaXRUcmVlKGludCBuKXsKICAgIGludCBpOwogICAgZm9yKGk9MDtpPE1BWDtpKyspewogICAgICAgIHRbaV0gPSAtMTsKICAgIH0KfQogCnZvaWQgcHJpbnRBKCl7CiAgICBpbnQgaTsKICAgIGZvcihpPTE7aTw9c3o7aSsrKSBwcmludGYoIiVkICIsdFtpXSk7CiAgICBwcmludGYoIlxuIik7Cn0KIAp2b2lkIHByaW50VChpbnQgaSl7CiAgICBpbnQgeCA9IGk7CiAgICB3aGlsZSh4LzIhPTApewogICAgICAgIHByaW50ZigiICAiKTsKICAgICAgICB4Lz0yOwogICAgfQogICAgcHJpbnRmKCIlZFxuIix0W2ldKTsKfQogCmludCBnb1AoaW50IGkpewogICAgaWYoaS8yID09IDApIHJldHVybiAwOwogICAgZWxzZSByZXR1cm4gaS8yOwp9CiAKaW50IGdvTChpbnQgaSl7CiAgICBpZigyKmkgPj0gTUFYKSByZXR1cm4gMDsKICAgIGVsc2UgcmV0dXJuIDIqaTsKfQogCmludCBnb1IoaW50IGkpewogICAgaWYoMippKzEgPj0gTUFYKSByZXR1cm4gMDsKICAgIGVsc2UgcmV0dXJuIDIqaSsxOwp9CiAKdm9pZCBwcmVPcmRlcihpbnQgaSl7CiAgICBpZih0W2ldID09IC0xKSByZXR1cm47CiAgICBwcmludFQoaSk7CiAgICBwcmVPcmRlcihnb0woaSkpOwogICAgcHJlT3JkZXIoZ29SKGkpKTsKfQogCnZvaWQgaW5PcmRlcihpbnQgaSl7CiAgICBpZih0W2ldID09IC0xKSByZXR1cm47CiAgICBpbk9yZGVyKGdvTChpKSk7CiAgICBwcmludFQoaSk7CiAgICBpbk9yZGVyKGdvUihpKSk7Cn0KIAp2b2lkIHBvc3RPcmRlcihpbnQgaSl7CiAgICBpZih0W2ldID09IC0xKSByZXR1cm47CiAgICBwb3N0T3JkZXIoZ29MKGkpKTsKICAgIHBvc3RPcmRlcihnb1IoaSkpOwogICAgcHJpbnRUKGkpOwp9CiAKdm9pZCBpbnNCVChpbnQgeCl7CiAgICBpbnQgayxpID0gMTsKICAgIGZvcihrPTA7azxoZWlnaHQ7aysrKXsKICAgICAgICBpZih0W2ldPT0tMSl7CiAgICAgICAgICAgIHRbaV0gPSB4OwogICAgICAgICAgICBzeisrOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmKHggPCB0W2ldKSBpID0gZ29MKGkpOwogICAgICAgIGVsc2UgaSA9IGdvUihpKTsKICAgIH0KICAgIHByaW50ZigiRXJyb3IgOiB0b28gaGlnaCAtPiAlZFxuIix4KTsKfQogCmludCBwb3BIZWFwKCl7CiAgICBpbnQgaSA9IDE7CiAgICBpbnQgbCxyLG1hOwogICAgaW50IHJldCA9IHRbaV07CiAgICB0W2ldID0gdFtzel07IC8vdFsxXSA9IHRbc3pdCiAgICB0W3N6LS1dID0gLTE7IC8vdFtzel09LTEg44KS44GX44Gm44GL44KJIHN6PXN6LTEg44Gu5oSP5ZGzCiAgICB3aGlsZShpKjIgPD0gc3opewogICAgICAgIGwgPSBnb0woaSk7CiAgICAgICAgciA9IGdvUihpKTsKICAgICAgICBpZih0W2xdPHRbcl0pIG1hID0gcjsKICAgICAgICBlbHNlIG1hID0gbDsKICAgICAgICBpZih0W2ldID4gdFttYV0pIGJyZWFrOwogICAgICAgIHN3YXAoJnRbaV0sJnRbbWFdKTsKICAgICAgICBpID0gbWE7CiAgICB9CiAgICByZXR1cm4gcmV0Owp9Cgp2b2lkIHB1c2hIZWFwKGludCB4KXsKICAgIGludCBpID0gKytzejsKICAgIGludCBwOwogICAgaWYoaT49TUFYLTEpIHsKICAgIAlwcmludGYoIkVycm9yIDogb3V0IHNpemUgPCAlZCAtPiAlZFxuIixNQVgtMSxpKTsKICAgIAl0W3N6XSA9IC0xOwogICAgCXN6LS07CiAgICAJcmV0dXJuOwoJfQogCiAgICB0W3N6XSA9IHg7CiAgICB3aGlsZSgxPGkpewogICAgICAgIHAgPSBnb1AoaSk7CiAgICAgICAgaWYodFtpXSA8PSB0W3BdKSByZXR1cm47CiAgICAgICAgZWxzZSBzd2FwKCZ0W2ldLCZ0W3BdKTsKICAgICAgICBpID0gcDsKICAgIH0KfQogCmludCBtYWluKHZvaWQpewogICAgaW50IGkseCxuOwogICAgc2NhbmYoIiVkIiwmbik7CiAgICBpbml0VHJlZShuKTsKICAgIGZvcihpPTA7aTxuO2krKyl7CiAgICAgICAgc2NhbmYoIiVkIiwmdFtpKzFdKTsKICAgIH0KICAgIHN6ID0gbjsKCWluT3JkZXIoMSk7CiAKCS8vIHBvcAoJaW50IGE9cG9wSGVhcCgpOwoJcHJpbnRmKCJwb3AgOiAlZFxuIixhKTsKCWluT3JkZXIoMSk7CiAKCWEgPSBwb3BIZWFwKCk7CglwcmludGYoInBvcCA6ICVkXG4iLGEpOwogCglpbk9yZGVyKDEpOwogCglwcmludGYoInB1c2ggOiAxMDBcbiIpOwoJcHVzaEhlYXAoMTAwKTsKCWluT3JkZXIoMSk7CiAKCXByaW50ZigicHVzaCA6IDMwXG4iKTsKCXB1c2hIZWFwKDMwKTsKCWluT3JkZXIoMSk7CiAgICByZXR1cm4gMDsKfQ==