-
Priority Queue using array based Heap자료구조 2023. 7. 14. 19:42
2751번: 수 정렬하기 2
첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.
www.acmicpc.net
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980#include <bits/stdc++.h>#define endl '\n'using namespace std;class Heap{private:int* arr;int n;int N;public:Heap() = delete;Heap(int N) : arr{new int[N+1]}, n{0}, N{N} {}~Heap();int size() const { return n; }bool empty() const { return n == 0; }void push(int x);int pop();};int main(){ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);int N; cin >> N;Heap hp{N};for(int i = 0; i < N; i++){int tmp; cin >> tmp;hp.push(tmp);}for(int i = 0; i < N; i++){cout << hp.pop() << endl;}return 0;}Heap::~Heap(){if(arr != nullptr){delete arr; arr = nullptr;}}void Heap::push(int x){if(n == N) throw "full";n += 1;arr[n] = x;for(int i = n; i > 1; i /= 2){if(arr[i] < arr[i/2]) swap(arr[i], arr[i/2]);else break;}}int Heap::pop(){if(empty()) throw "empty";int ret = arr[1];arr[1] = arr[n];int p = 1;while(2*p <= n){int nxt = 2*p;if(2*p + 1 <= n && arr[2*p] > arr[2*p+1]) nxt += 1;if(arr[p] < arr[nxt]) break;else{swap(arr[p], arr[nxt]);p = nxt;}}n -= 1;return ret;}cs'자료구조' 카테고리의 다른 글
대학교에서 배운 자료구조 (0) 2023.07.14 AVL tree (0) 2023.07.14 Linked-structure binary search tree(BST) (0) 2023.07.05 Priority Queue using Linked Heap (0) 2023.07.04