본문 바로가기
[백준]

백준 11286번 절댓값 힙

by Hevton 2023. 8. 10.
반응형

 

multiset을 이용해서 풀었다

#include <iostream>
#include <set>
#include <cmath>

using namespace std;

int main() {
    
    int N, num;
    multiset<pair<int, int>> mset;
    
    cin >> N;
    
    while(N--) {
        
        cin >> num;
        
        if(num != 0) {
            mset.insert({abs(num), num});
        } else if(mset.size() == 0) {
            cout << 0 << "\n";
        } else {
            
            cout << (*(mset.begin())).second << "\n";
            mset.erase(mset.begin());
        }
    }
    
    
}

 

 

만약 비교함수를 재정의해주고싶다면, priority_queue도 set도 multiset도 구조체를 이용해야한다.

예로, set이나 multiset의 pair<int, int>의 경우 디폴트 값은 이렇게 정의되어 있을 거고 이걸 입맛대로 바꿔주면 된다.

struct cmp {
    bool operator() (const pair<int, int>& a, const pair<int, int>& b) const {
        if(a.first == b.first)
            return a.second < b.second;
        else
            return a.first < b.first;
    }
};

 

반응형

'[백준]' 카테고리의 다른 글

백준 20055번 C++  (0) 2023.10.04
백준 17140번 C++  (0) 2023.10.04
[BaekJoon/백준 21609번 상어 중학교  (1) 2022.10.13
[BaekJoon/백준] 17144번 미세먼지 안녕!  (0) 2022.10.10
[BaekJoon/백준] 23288번 주사위 굴리기 2  (0) 2022.10.10