알고리즘

[C++] 백준 11286번 절댓값 힙

J3SUNG 2019. 9. 10. 00:11
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;
}