백준 문제 풀이 C++

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

골슼 2023. 1. 11. 20:11
 

11286번: 절댓값 힙

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

www.acmicpc.net

우선순위 큐를 불러올 때 우선순위를 작성자가 임의로 설정할 수 있도록 cmp 구조체를 첨부한다.

 

구조체에서 a,b는 각각 부모, 자식 노드를 의미하며 return 값이 참이면 노드간의 swap을 진행한다. 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include<bits/stdc++.h>
 
using namespace std;
 
struct cmp{
    bool operator()(int a, int b){
        if(abs(a) == abs(b)) return a > b;
        return abs(a) > abs(b);
    }
};
 
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    priority_queue<intvector<int>, cmp> pq;
    int n;
    cin >> n;
    int cmd;
    for(int i = 0; i < n; i++){
        cin >> cmd;
        if(cmd == 0){
            if(pq.empty()) cout << "0\n";
            else{
                cout << pq.top() << "\n";
                pq.pop();
            }
        }
        else pq.push(cmd);
    }
    
 
    return 0;
}
 
cs