#include void swap(int *x1, int *x2){ int temp = *x1; *x1 = *x2; *x2 = temp; } void insert_heap(int* heap, int *heap_size, int x){ heap[++(*heap_size)] = x; int child = *heap_size; int parent = child / 2; while(child > 1 && heap[child] < heap[parent]){ swap(&heap[child], &heap[parent]); child = parent; parent = child / 2; } } int delete_heap(int* heap, int *heap_size){ if(*heap_size == 0) return 0; int return_value = heap[1]; heap[1] = heap[(*heap_size)--]; int parent = 1; int child = parent*2; while(child <= *heap_size){ if(child + 1 <= *heap_size && heap[child] > heap[child+1]) child++; if(heap[parent] <= heap[child]) break; swap(&heap[child], &heap[parent]); parent = child; child = parent*2; } return return_value; } int main(){ int heap[100001]; int heap_size = 0; int N; scanf("%d",&N); while(N--){ int input; scanf("%d",&input); if(input) insert_heap(heap, &heap_size, input); else printf("%d\n",delete_heap(heap, &heap_size)); } return 0; } // 9 // 0 // 12345678 // 1 // 2 // 0 // 0 // 0 // 0 // 32 // #include // #include // #define Max_size 100000 // typedef struct{ // int key; // }element; // typedef struct{ // element heap[Max_size]; // int heap_size; // }HeapType; // HeapType* create(){ // return (HeapType*)malloc(sizeof(HeapType)); // } // void init(HeapType* h){ // h->heap_size = 0; // } // void insert_heap(HeapType* h, element item){ // int i = ++(h->heap_size); // while ((i != 1) && (item.key < h->heap[i / 2].key)) { // h->heap[i] = h->heap[i / 2]; // i /= 2; // } // h->heap[i] = item; // } // element delete_heap(HeapType* h){ // int parent, child; // element item, temp; // item = h->heap[1]; // temp = h->heap[(h->heap_size)--]; // parent = 1; // child = 2; // while (child <= h->heap_size) { // if ((child < h->heap_size) && // (h->heap[child].key) > h->heap[child + 1].key) // child++; // if (temp.key <= h->heap[child].key) break; // h->heap[parent] = h->heap[child]; // parent = child; // child *= 2; // } // h->heap[parent] = temp; // return item; // } // int main() { // HeapType* h; // h = create(); // init(h); // int N; // scanf("%d",&N); // while(N--){ // int input; // scanf("%d",&input); // if(input==0){ // printf("%d\n",h->heap_size ? delete_heap(h).key : 0); // } // else { // element item; // item.key = input; // insert_heap(h, item); // } // } // free(h); // return 0; // }