# 14148 - DS_2023_hw5_Sort
>author: Utin
###### tags: `Data Structure`
---
## Brief
1. Create a min heap of size ***k***.
2. If the min heap isn't full, the input number should be insert to the min heap.
3. If the min heap is full, we should replace ***min_heap[0]*** with the input integer and maintain the min heap.
4. After all, ***min_heap[0]*** will be the answer we should output.
## Solution 0
```cpp=
#include <iostream>
void swap(int a, int b, int* arr, int* curr);
int main() {
int n, k;
std::cin >> n >> k;
int min_heap[k];
int len = 0;
for (int t = 0; t < n; t++) {
int input;
std::cin >> input;
if (len < k) {
// insert to the bottom
min_heap[len++] = input;
// maintain min heap
int curr = len - 1;
while (curr > 0 && min_heap[curr] < min_heap[(curr - 1) / 2])
swap(curr, (curr - 1) / 2, min_heap, &curr);
}
else if (input > min_heap[0]) {
// insert to the top
min_heap[0] = input;
// maintain min heap
int curr = 0;
while (curr * 2 + 1 < len) {
if (curr * 2 + 2 < len) {
if (min_heap[curr] < min_heap[curr * 2 + 1] && min_heap[curr] < min_heap[curr * 2 + 2])
break;
if (min_heap[curr * 2 + 1] < min_heap[curr * 2 + 2])
swap(curr, curr * 2 + 1, min_heap, &curr);
else
swap(curr, curr * 2 + 2, min_heap, &curr);
}
else {
if (min_heap[curr] < min_heap[curr * 2 + 1])
break;
else
swap(curr, curr * 2 + 1, min_heap, &curr);
}
}
}
}
// output
std::cout << min_heap[0] << '\n';
}
void swap(int a, int b, int* arr, int* curr) {
int tmp = arr[a];
arr[a] = arr[b];
arr[b] = tmp;
*curr = b;
}
// By Utin
```
## Reference