문제 링크
풀이
multiset을 이용하여 풀 수 있다.
multiset은 정렬이 되어있는 균형 이진트리 형태로 구현돼있기 때문에 가장 큰 값과 가장 작은 값을 쉽게 구할 수 있다.
코드
#include <bits/stdc++.h>
using namespace std;
int main() {
int t; scanf("%d", &t);
while (t--) {
multiset<int> ms;
int n; scanf("%d", &n);
while (n--) {
char cmd; int num; scanf(" %c %d", &cmd, &num);
if (cmd == 'I') {
ms.insert(num);
} else {
if (ms.empty()) continue;
if (num == -1) {
int k = *ms.begin();
ms.erase(ms.lower_bound(k));
} else {
int k = *ms.rbegin();
ms.erase(ms.lower_bound(k));
}
}
}
if (ms.empty()) printf("EMPTY\n");
else printf("%d %d\n", *ms.rbegin(), *ms.begin());
}
}
'Algorithm > BOJ' 카테고리의 다른 글
백준[13549] 숨바꼭질 3 (0) | 2022.01.18 |
---|---|
백준[1865] 웜홀 (0) | 2022.01.18 |
백준[1238] 파티 (0) | 2022.01.11 |
백준[1562] 계단 수 (0) | 2022.01.09 |
백준[1208] 부분수열의 합 2 (0) | 2022.01.09 |