PS

BOJ 11286 - 절댓값 힙

728x90

www.acmicpc.net/problem/11286

 

11286번: 절댓값 힙

첫째 줄에 연산의 개수 N(1≤N≤100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 0이 아니라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0

www.acmicpc.net

 

우선순위 큐에 less, greater 대신에 별도의

비교 연산을 위한 구조체를 정의해서 넣으면 된다.

 

- c++

 

#include <cmath>
#include <iostream>
#include <queue>
 
using namespace std;
 
int n;
 
struct compare {
    bool operator()(const int& num1, const int& num2) {
        if (abs(num1) != abs(num2))
            return abs(num1) > abs(num2);
        else
            return num1 > num2;
    }
};
 
int main() {
    cin.tie(0);
    ios_base::sync_with_stdio(0);
 
    priority_queue<intvector<int>, compare> pq;
 
    cin >> n;
    for (int i = 0; i < n; ++i) {
        int x;
        cin >> x;
        if (x) {
            pq.push(x);
        } else {
            if (!pq.empty()) {
                cout << pq.top() << "\n";
                pq.pop();
            } else {
                cout << "0\n";
            }
        }
    }
 
    return 0;
}
 
cs

 

 

 

728x90

'PS' 카테고리의 다른 글

BOJ 11404 - 플로이드  (0) 2020.12.15
BOJ 15685 - 드래곤 커브  (0) 2020.12.15
BOJ 15684 - 사다리 조작  (0) 2020.12.14
프로그래머스 - JadenCase 문자열 만들기  (0) 2020.12.09
프로그래머스 - N 개의 최소공배수  (0) 2020.12.09