개요
- BOJ 11279 최대 힙
C++
배열 사용
#include <iostream>
using namespace std;
int A[100001];
int len = 0;
int pop() {
if(len < 1) {
return 0;
}
len--;
return A[len];
}
int search(int x) {
int start = 0;
int end = len;
int mid = 0;
while(start < end) {
mid = (start+end)/2;
if(A[mid] < x) {
mid++;
start = mid;
} else {
end = mid;
}
}
return mid;
}
void push(int x) {
int idx = search(x);
for(int i=len; i>idx; i--) {
A[i] = A[i-1];
}
A[idx] = x;
len++;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int N, x;
cin >> N;
for(int i=0; i<N; i++) {
cin >> x;
if(x == 0) {
cout << pop() << '\n';
} else {
push(x);
}
}
}
priority_queue 사용
#include <iostream>
#include <queue>
using namespace std;
priority_queue<int> q;
int pop() {
if(q.empty()) {
return 0;
}
int temp = q.top();
q.pop();
return temp;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int N, x;
cin >> N;
for(int i=0; i<N; i++) {
cin >> x;
if(x == 0) {
cout << pop() << '\n';
} else {
q.push(x);
}
}
}