728x90
우선순위 큐에서 값을 뽑아낼 때 절대값이 낮은 순대로 뽑는 문제입니다.
절댓값을 기준으로하여 내림차순으로 뽑아야하므로 다음처럼 선언해줍니다.
priority_queue<pair<int, int>, vector<pair<int, int> >, greater<pair<int, int> > > pq;
pair의 첫번째는 절댓값이고, 두번째는 원래 값입니다.
그 뒤의 것들은 내림차순을 의미합니다.
#include <iostream>
#include <string>
#include <algorithm>
#include <cstring>
#include <vector>
#include <queue>
using namespace std;
int main(int argc, char *argv[])
{
int n;
int num;
priority_queue<pair<int, int>, vector<pair<int, int> >, greater<pair<int, int> > > pq;
scanf("%d", &n);
while (n--) {
scanf("%d", &num);
if (num == 0) {
if (pq.empty()) {
printf("0\n");
}
else {
printf("%d\n", pq.top().second);
pq.pop();
}
}
else {
pq.push(make_pair(abs(num), num));
}
}
return 0;
}
'알고리즘' 카테고리의 다른 글
[C++] 백준 3425번 고스택 (0) | 2019.09.10 |
---|---|
[C++] 백준 1655번 가운데를 말해요 (0) | 2019.09.10 |
[C++] 백준 1927번 최소 힙 (0) | 2019.09.09 |
[C++] 백준 11279번 최대 힙 (0) | 2019.09.09 |
[C++] 백준 10816번 숫자 카드 2 (0) | 2019.09.09 |