From d536d12d89e2a9eb5f6395a738198a354e6d3a8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9E=84=EC=8A=B9=ED=98=B8?= <132066506+YIM2UL2ET@users.noreply.github.com> Date: Mon, 1 Apr 2024 22:13:51 +0900 Subject: [PATCH] =?UTF-8?q?14=EC=B0=A8=EC=8B=9C=20=EC=97=85=EB=A1=9C?= =?UTF-8?q?=EB=93=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- YIM2UL2ET/README.md | 1 + ...4\354\260\250\354\213\234 - BOJ 11286.cpp" | 51 +++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 "YIM2UL2ET/\354\232\260\354\204\240\354\210\234\354\234\204 \355\201\220/14\354\260\250\354\213\234 - BOJ 11286.cpp" diff --git a/YIM2UL2ET/README.md b/YIM2UL2ET/README.md index 2431e6c..97466af 100644 --- a/YIM2UL2ET/README.md +++ b/YIM2UL2ET/README.md @@ -15,4 +15,5 @@ | 11차시 | 2024.03.18 | 스택 | [BOJ 1918](https://www.acmicpc.net/problem/1918) | [BOJ 1918 풀이](https://github.com/AlgoLeadMe/AlgoLeadMe-7/pull/36) | | 12차시 | 2024.03.28 | 비트마스킹 | [BOJ 11723](https://www.acmicpc.net/problem/11723) | [BOJ 11723 풀이](https://github.com/AlgoLeadMe/AlgoLeadMe-7/pull/39) | | 13차시 | 2024.04.01 | BFS | [BOJ 7569](https://www.acmicpc.net/problem/7569) | [BOJ 7569 풀이](https://github.com/AlgoLeadMe/AlgoLeadMe-7/pull/42) | +| 14차시 | 2024.04.04 | 우선순위 큐 | [BOJ 11286](https://www.acmicpc.net/problem/11286) | [BOJ 11286 풀이](https://github.com/AlgoLeadMe/AlgoLeadMe-7/pull/43) | --- diff --git "a/YIM2UL2ET/\354\232\260\354\204\240\354\210\234\354\234\204 \355\201\220/14\354\260\250\354\213\234 - BOJ 11286.cpp" "b/YIM2UL2ET/\354\232\260\354\204\240\354\210\234\354\234\204 \355\201\220/14\354\260\250\354\213\234 - BOJ 11286.cpp" new file mode 100644 index 0000000..43b1864 --- /dev/null +++ "b/YIM2UL2ET/\354\232\260\354\204\240\354\210\234\354\234\204 \355\201\220/14\354\260\250\354\213\234 - BOJ 11286.cpp" @@ -0,0 +1,51 @@ +#include +#include + +void cre_heap(std::vector &heap, int key) { + int k = heap.size(); + heap.push_back(key); + while (k > 1) { + if (abs(heap[k/2]) > abs(heap[k]) || (abs(heap[k/2]) == abs(heap[k]) && heap[k/2] > heap[k])) { + std::swap(heap[k], heap[k/2]); + k /= 2; + } + else break; + } + return; +} + +void del_heap(std::vector &heap) { + int k = 1; + heap[1] = heap.back(), heap.pop_back(); + while (k * 2 <= heap.size()) { + if (k * 2 + 1 < heap.size() && (abs(heap[k*2+1]) < abs(heap[k*2]) || (abs(heap[k*2+1]) == abs(heap[k*2]) && heap[k*2+1] < heap[k*2]))) + k = k*2+1; + else k = k*2; + + if (abs(heap[k/2]) > abs(heap[k]) || (abs(heap[k/2]) == abs(heap[k]) && heap[k/2] > heap[k])) + std::swap(heap[k/2], heap[k]); + else break; + } + return; +} + +int main(void) { + std::ios_base::sync_with_stdio(false); + std::cin.tie(NULL); + std::cout.tie(NULL); + + int n, k, x; + std::vector abs_heap = {0}; + + std::cin >> n; + for (int i = 0; i < n; i++) { + std::cin >> x; + if (abs(x) > 0) cre_heap(abs_heap, x); + else if (abs_heap.size() > 1) { + std::cout << abs_heap[1] << '\n'; + del_heap(abs_heap); + } + else std::cout << 0 << '\n'; + } + +} \ No newline at end of file