개발하는 kim-hasa

[c++][BOJ][11286] 절댓값 힙 본문

Algorithm/BOJ

[c++][BOJ][11286] 절댓값 힙

kim-hasa 2022. 3. 2. 14:51

https://www.acmicpc.net/problem/11286

 

11286번: 절댓값 힙

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

www.acmicpc.net

힙의 마지막 문제  절대값 힙 문제입니다.

 

이전 두 힙과는 다르게 , 절대값으로 비교해야 합니다.

 

우선순위 큐에 pair 함수를 써서 , 절대값으로 정렬 된 후 2번째 인자로 음수인지 양수인지를 넣어서 정렬합니다.

 

그 이후 절대값으로 비교하고 작은 수(음수) 부터 출력합니다.

#include <iostream>
#include <queue>
#include <algorithm>
using namespace std;

int main(){
    ios_base :: sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    
    int n;
    cin >> n;
    
    priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> arr;
    
    for(int i=0; i<n; i++){
        int num;
        cin >> num;
        
        if(num == 0){
            if(arr.empty()){
                cout << '0' << '\n';
            }
            else {
                cout << arr.top().second << '\n';
                arr.pop();
            }
        }
        else {
            arr.push({ abs(num) , num});
        }
    }
}

 

'Algorithm > BOJ' 카테고리의 다른 글

[c++][BOJ][1932] 정수 삼각형  (0) 2022.03.03
[c++][BOJ][11279] 최대 힙  (0) 2022.03.02
[c++][BOJ][1927] 최소 힙  (0) 2022.03.02
[c++][BOJ][1992] 쿼드트리  (0) 2022.03.02
[c++][BOJ][1780] 종이의 개수  (0) 2022.03.02