20250724 baekjoon

This commit is contained in:
songyc macbook 2025-07-24 21:47:16 +09:00
parent 841d32138f
commit 9de4b06813

View File

@ -0,0 +1,133 @@
#include <stdio.h>
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 <stdio.h>
// #include <stdlib.h>
// #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;
// }