#include <stdio.h>
#include <stdlib.h>
#define height 4
#define MAX (1<<height) //ビットシフト演算 2^height と同じ
int t[MAX+1]; //配列外アクセス防止のためのダミーで+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;
//子の大きい方と比較して子が大きければ交換する
//そうでなければヒープ完了.retを返す
if(t[i] > t[ma]) break;
swap(&t[i],&t[ma]);
i = ma;
}
return ret;
}
//末尾に要素を追加する
//アップヒープ
void pushHeap(int x){
int i = ++sz;
int p;
t[sz] = x; //余分なダミー要素を作ってあるので配列外アクセスは無い
while(1<i){
p = goP(i);
if(i>=MAX-1) {
printf("Error : out size < %d -> %d\n",MAX
-1,i
); t[sz] = -1;
sz--; //要素数が最大を超えていたら追加をしない
return;
}
//親と比較して,今見ている要素(子)の方が小さければ
//終了する.そうでなければ入れ替えて,続ける
if(t[i] <= t[p]) return;
else swap(&t[i],&t[p]);
i = p;
}
}
void sort(int a[], int n){
int i,j,min;
for(i=0;i<n;i++){
min=i;
for(j=0;j<n;j++){
if(a[j]<a[min]){
min=j;
}
}
swap(&a[i],&a[min]);
}
}
//必要があれば,関数をいくつでも追加して良い
int solve(){
int ret=0,i,n,q,x;
int a[50];
//ここにプログラムを書く
initTree(n);
for(i=0;i<n;i++){
}
sort(a,n);
for(i=0;i<n;i++){
pushHeap(a[i]);
}
for(i=0;i<q;i++){
pushHeap(popHeap()/2);
}
for(i=1;i<=sz;i++){
ret+=t[i];
}
return ret;
}
//メイン関数はいじらなくて良い
int main(void){
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KIAojZGVmaW5lIGhlaWdodCA0CiNkZWZpbmUgTUFYICgxPDxoZWlnaHQpICAvL+ODk+ODg+ODiOOCt+ODleODiOa8lOeulyAyXmhlaWdodCDjgajlkIzjgZgKIAppbnQgdFtNQVgrMV07IC8v6YWN5YiX5aSW44Ki44Kv44K744K56Ziy5q2i44Gu44Gf44KB44Gu44OA44Of44O844Gn77yL77yRCmludCBzeiA9IDA7CiAKdm9pZCBzd2FwKGludCAqeCwgaW50ICp5KXsKICAgIGludCB0bXAgPSAqeDsKICAgICp4ID0gKnk7CiAgICAqeSA9IHRtcDsKfQogCnZvaWQgaW5pdFRyZWUoaW50IG4pewogICAgaW50IGk7CiAgICBmb3IoaT0wO2k8TUFYO2krKyl7CiAgICAgICAgdFtpXSA9IC0xOwogICAgfQp9CiAKdm9pZCBwcmludEEoKXsKICAgIGludCBpOwogICAgZm9yKGk9MTtpPD1zejtpKyspIHByaW50ZigiJWQgIix0W2ldKTsKICAgIHByaW50ZigiXG4iKTsKfQogCnZvaWQgcHJpbnRUKGludCBpKXsKICAgIGludCB4ID0gaTsKICAgIHdoaWxlKHgvMiE9MCl7CiAgICAgICAgcHJpbnRmKCIgICIpOwogICAgICAgIHgvPTI7CiAgICB9CiAgICBwcmludGYoIiVkXG4iLHRbaV0pOwp9CiAKaW50IGdvUChpbnQgaSl7CiAgICBpZihpLzIgPT0gMCkgcmV0dXJuIDA7CiAgICBlbHNlIHJldHVybiBpLzI7Cn0KIAppbnQgZ29MKGludCBpKXsKICAgIGlmKDIqaSA+PSBNQVgpIHJldHVybiAwOwogICAgZWxzZSByZXR1cm4gMippOwp9CiAKaW50IGdvUihpbnQgaSl7CiAgICBpZigyKmkrMSA+PSBNQVgpIHJldHVybiAwOwogICAgZWxzZSByZXR1cm4gMippKzE7Cn0KIAp2b2lkIHByZU9yZGVyKGludCBpKXsKICAgIGlmKHRbaV0gPT0gLTEpIHJldHVybjsKICAgIHByaW50VChpKTsKICAgIHByZU9yZGVyKGdvTChpKSk7CiAgICBwcmVPcmRlcihnb1IoaSkpOwp9CiAKdm9pZCBpbk9yZGVyKGludCBpKXsKICAgIGlmKHRbaV0gPT0gLTEpIHJldHVybjsKICAgIGluT3JkZXIoZ29MKGkpKTsKICAgIHByaW50VChpKTsKICAgIGluT3JkZXIoZ29SKGkpKTsKfQogCnZvaWQgcG9zdE9yZGVyKGludCBpKXsKICAgIGlmKHRbaV0gPT0gLTEpIHJldHVybjsKICAgIHBvc3RPcmRlcihnb0woaSkpOwogICAgcG9zdE9yZGVyKGdvUihpKSk7CiAgICBwcmludFQoaSk7Cn0KIAp2b2lkIGluc0JUKGludCB4KXsKICAgIGludCBrLGkgPSAxOwogICAgZm9yKGs9MDtrPGhlaWdodDtrKyspewogICAgICAgIGlmKHRbaV09PS0xKXsKICAgICAgICAgICAgdFtpXSA9IHg7CiAgICAgICAgICAgIHN6Kys7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYoeCA8IHRbaV0pIGkgPSBnb0woaSk7CiAgICAgICAgZWxzZSBpID0gZ29SKGkpOwogICAgfQogICAgcHJpbnRmKCJFcnJvciA6IHRvbyBoaWdoIC0+ICVkXG4iLHgpOwp9CiAKLy/lhYjpoK3jga7opoHntKDjgpLlj5bjgorlh7rjgZkKLy/jg4Djgqbjg7Pjg5Ljg7zjg5cKaW50IHBvcEhlYXAoKXsKICAgIGludCBpID0gMTsKICAgIGludCBsLHIsbWE7CiAgICBpbnQgcmV0ID0gdFtpXTsKICAgIHRbaV0gPSB0W3N6XTsgLy90WzFdID0gdFtzel0KICAgIHRbc3otLV0gPSAtMTsgLy90W3N6XT0tMSDjgpLjgZfjgabjgYvjgokgc3o9c3otMSDjga7mhI/lkbMKICAgIHdoaWxlKGkqMiA8PSBzeil7CiAgICAgICAgbCA9IGdvTChpKTsKICAgICAgICByID0gZ29SKGkpOwogICAgICAgIC8v5a2Q44Gu44GG44Gh5aSn44GN44GE5pa544Go5q+U6LyD44GZ44KLCiAgICAgICAgaWYodFtsXTx0W3JdKSBtYSA9IHI7CiAgICAgICAgZWxzZSBtYSA9IGw7CiAgICAgICAgLy/lrZDjga7lpKfjgY3jgYTmlrnjgajmr5TovIPjgZfjgablrZDjgYzlpKfjgY3jgZHjgozjgbDkuqTmj5vjgZnjgosKICAgICAgICAvL+OBneOBhuOBp+OBquOBkeOCjOOBsOODkuODvOODl+WujOS6hu+8jnJldOOCkui/lOOBmQogICAgICAgIGlmKHRbaV0gPiB0W21hXSkgYnJlYWs7CiAgICAgICAgc3dhcCgmdFtpXSwmdFttYV0pOwogICAgICAgIGkgPSBtYTsKICAgIH0KICAgIHJldHVybiByZXQ7Cn0KIAovL+acq+WwvuOBq+imgee0oOOCkui/veWKoOOBmeOCiwovL+OCouODg+ODl+ODkuODvOODlwp2b2lkIHB1c2hIZWFwKGludCB4KXsKICAgIGludCBpID0gKytzejsKICAgIGludCBwOwogICAgdFtzel0gPSB4OyAgLy/kvZnliIbjgarjg4Djg5/jg7zopoHntKDjgpLkvZzjgaPjgabjgYLjgovjga7jgafphY3liJflpJbjgqLjgq/jgrvjgrnjga/nhKHjgYQKICAgIHdoaWxlKDE8aSl7CiAgICAgICAgcCA9IGdvUChpKTsKICAgICAgICBpZihpPj1NQVgtMSkgewogICAgICAgICAgICBwcmludGYoIkVycm9yIDogb3V0IHNpemUgPCAlZCAtPiAlZFxuIixNQVgtMSxpKTsKICAgICAgICAgICAgdFtzel0gPSAtMTsKICAgICAgICAgICAgc3otLTsgLy/opoHntKDmlbDjgYzmnIDlpKfjgpLotoXjgYjjgabjgYTjgZ/jgonov73liqDjgpLjgZfjgarjgYQKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICAvL+imquOBqOavlOi8g+OBl+OBpu+8jOS7iuimi+OBpuOBhOOCi+imgee0oO+8iOWtkO+8ieOBruaWueOBjOWwj+OBleOBkeOCjOOBsAogICAgICAgIC8v57WC5LqG44GZ44KL77yO44Gd44GG44Gn44Gq44GR44KM44Gw5YWl44KM5pu/44GI44Gm77yM57aa44GR44KLCiAgICAgICAgaWYodFtpXSA8PSB0W3BdKSByZXR1cm47CiAgICAgICAgZWxzZSBzd2FwKCZ0W2ldLCZ0W3BdKTsKICAgICAgICBpID0gcDsKICAgIH0KfQp2b2lkIHNvcnQoaW50IGFbXSwgaW50IG4pewoJaW50IGksaixtaW47Cglmb3IoaT0wO2k8bjtpKyspewoJCW1pbj1pOwoJCWZvcihqPTA7ajxuO2orKyl7CgkJCWlmKGFbal08YVttaW5dKXsKCQkJCW1pbj1qOwoJCQl9CgkJfQoJCXN3YXAoJmFbaV0sJmFbbWluXSk7Cgl9Cn0KIC8v5b+F6KaB44GM44GC44KM44Gw77yM6Zai5pWw44KS44GE44GP44Gk44Gn44KC6L+95Yqg44GX44Gm6Imv44GECiAKaW50IHNvbHZlKCl7CiAgICBpbnQgcmV0PTAsaSxuLHEseDsKICAgIGludCBhWzUwXTsKICAgIC8v44GT44GT44Gr44OX44Ot44Kw44Op44Og44KS5pu444GPCiAgICBzY2FuZigiJWQgJWQiLCZuLCZxKTsKICAgIGluaXRUcmVlKG4pOwogICAgZm9yKGk9MDtpPG47aSsrKXsKICAgIAlzY2FuZigiJWQiLCZhW2ldKTsKICAgIH0KICAgIHNvcnQoYSxuKTsKICAgIGZvcihpPTA7aTxuO2krKyl7CiAgICAJcHVzaEhlYXAoYVtpXSk7CiAgICB9CiAgICBmb3IoaT0wO2k8cTtpKyspewogICAgCXB1c2hIZWFwKHBvcEhlYXAoKS8yKTsKICAgIH0KICAgIGZvcihpPTE7aTw9c3o7aSsrKXsKICAgIAlyZXQrPXRbaV07CiAgICB9CiAgICByZXR1cm4gcmV0Owp9CiAKLy/jg6HjgqTjg7PplqLmlbDjga/jgYTjgZjjgonjgarjgY/jgaboia/jgYQKaW50IG1haW4odm9pZCl7CiAgICBwcmludGYoIiVkXG4iLHNvbHZlKCkpOwogICAgcmV0dXJuIDA7Cn0=