반응형
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 |