#include <stdio.h>
#include <stdlib.h>
#define hmax 50
/* ヒープを表す構造体の定義 */
struct heap {
int box[hmax+1];
int size;
};
void swap(int *u, int *v)
{
int temp;
temp = *u;
*u = *v;
*v = temp;
}
/* ヒープの初期化 */
void initialize(struct heap *h)
{
h->size = 0;
}
/* ヒープへの要素の挿入 */
void insert(struct heap *h, int item)
{
int i;
i = ++h->size;
h->box[i] = item;
while(i > 1 && h->box[i] < h->box[i / 2]) {
swap(&h->box[i], &h->box[i / 2]);
i /= 2;
}
}
/* ヒープの最小要素 */
int findmin(struct heap *h)
{
return(h->box[1]);
}
/* 最小要素の削除 */
void deletemin(struct heap *h)
{
int i, k;
i = 1;
h->box[1] = h->box[h->size];
--h->size;
while(2 * i <= h->size) {
k = 2 *i;
if(k < h->size && h->box[k] > h->box[k + 1])
k++;
if(h->box[i] <= h->box[k])
break;
swap(&h->box[i], &h->box[k]);
i = k;
}
}
int main(void) {
int i,j;
struct heap *h;
h
=(struct heap
*)malloc(sizeof(struct heap
)); initialize(h);
insert(h,10);
for(i=1;i<8;i++){
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2RlZmluZSBobWF4IDUwCgovKiDjg5Ljg7zjg5fjgpLooajjgZnmp4vpgKDkvZPjga7lrprnvqkgKi8Kc3RydWN0IGhlYXAgewogIGludCBib3hbaG1heCsxXTsKICBpbnQgc2l6ZTsKfTsKCnZvaWQgc3dhcChpbnQgKnUsIGludCAqdikKewogIGludCB0ZW1wOwoKICB0ZW1wID0gKnU7CiAgKnUgPSAqdjsKICAqdiA9IHRlbXA7Cn0KCi8qIOODkuODvOODl+OBruWIneacn+WMliAqLwp2b2lkIGluaXRpYWxpemUoc3RydWN0IGhlYXAgKmgpCnsKICBoLT5zaXplID0gMDsKfQoKLyog44OS44O844OX44G444Gu6KaB57Sg44Gu5oy/5YWlICovCnZvaWQgaW5zZXJ0KHN0cnVjdCBoZWFwICpoLCBpbnQgaXRlbSkKewogIGludCBpOwoKICBpID0gKytoLT5zaXplOwogIGgtPmJveFtpXSA9IGl0ZW07CiAgd2hpbGUoaSA+IDEgJiYgaC0+Ym94W2ldIDwgaC0+Ym94W2kgLyAyXSkgewogICAgc3dhcCgmaC0+Ym94W2ldLCAmaC0+Ym94W2kgLyAyXSk7CiAgICBpIC89IDI7CiAgfQp9CgovKiDjg5Ljg7zjg5fjga7mnIDlsI/opoHntKAgKi8KaW50IGZpbmRtaW4oc3RydWN0IGhlYXAgKmgpCnsKICByZXR1cm4oaC0+Ym94WzFdKTsKfQoKLyog5pyA5bCP6KaB57Sg44Gu5YmK6ZmkICovCnZvaWQgZGVsZXRlbWluKHN0cnVjdCBoZWFwICpoKQp7CiAgaW50IGksIGs7CgogIGkgPSAxOwogIGgtPmJveFsxXSA9IGgtPmJveFtoLT5zaXplXTsKICAtLWgtPnNpemU7CiAgd2hpbGUoMiAqIGkgPD0gaC0+c2l6ZSkgewogICAgayA9IDIgKmk7CiAgICBpZihrIDwgaC0+c2l6ZSAmJiBoLT5ib3hba10gPiBoLT5ib3hbayArIDFdKQogICAgICBrKys7CiAgICBpZihoLT5ib3hbaV0gPD0gaC0+Ym94W2tdKQogICAgICBicmVhazsKICAgIHN3YXAoJmgtPmJveFtpXSwgJmgtPmJveFtrXSk7CiAgICBpID0gazsKICB9Cn0KCmludCBtYWluKHZvaWQpIHsKCWludCBpLGo7CglzdHJ1Y3QgaGVhcCAqaDsKCQoJaD0oc3RydWN0IGhlYXAgKiltYWxsb2Moc2l6ZW9mKHN0cnVjdCBoZWFwKSk7Cglpbml0aWFsaXplKGgpOwoJCglpbnNlcnQoaCwxMCk7CgkKCWZvcihpPTE7aTw4O2krKyl7CgkKCX0KCXJldHVybiAwOwp9Cg==