π PS/Algorithm
[Baekjoon] 7662λ²: μ΄μ€ μ°μ μμ ν
hades1
2024. 7. 17. 22:42
π₯ λ¬Έμ
https://www.acmicpc.net/problem/7662
π μ€κ³
μ²μμ min_pqμ max_pqλ§μ λ§λ€μ΄μ DμΌ λ nμ΄ λ¬΄μμ΄λμ λ°λΌ νμͺ½μΌλ‘ λͺ°μμ μ²λ¦¬νλ λ°©μμ ννλλ° μκ° μ΄κ³Όκ° λ°μνλ€. λ€λ₯Έ λ°©λ²μ μ°ΎμμΌ νλ€.
mapμ μ΄μ©νμ¬ κ°μλ₯Ό μ μ₯νκ³ , DμΌ λ, μμ λ₯Ό νκΈ° μ , λ€λ₯Έ λͺ λ Ήμμ κ°μκ° 0μ΄ λμμ μλ μμΌλ―λ‘ κ·Έ κ²½μ°λ₯Ό κ³ λ €νμ¬ μμ μ²λ¦¬λ₯Ό ν΄μ£Όμ΄μΌ νλ€. μλ₯Ό λ€μ΄ D 1μ΄μ΄μ max_pqμμλ μμ νμ§λ§, min_pqμμλ μμ ν μ μμΌλ―λ‘ λ°μλμ§ μμλ€. κ°μλ§ κ°μμν€κ³ , μμ νλ €λ μμ κ°μκ° 0μΌ λ, λͺ¨λ μμ νλ€.
π νμ΄
#include <iostream>
#include <queue>
#include <map>
using namespace std;
char ch;
int t, k, n;
int main(void)
{
cin >> t;
for (int i = 0; i < t; i++) {
cin >> k;
priority_queue<int, vector<int>, greater<int>> min_pq;
priority_queue<int> max_pq;
map<int, int> save;
for (int j = 0; j < k; j++) {
cin >> ch >> n;
if (ch == 'I') {
min_pq.push(n);
max_pq.push(n);
if (save.count(n) == 0){
save[n] = 1;
}
else{
save[n] += 1;
}
}
else {
if (n == 1) {
while (!max_pq.empty() && save[max_pq.top()] == 0){
max_pq.pop();
}
if (!max_pq.empty()){
save[max_pq.top()] -= 1;
max_pq.pop();
}
}
else {
while (!min_pq.empty() && save[min_pq.top()] == 0){
min_pq.pop();
}
if (!min_pq.empty()){
save[min_pq.top()] -= 1;
min_pq.pop();
}
}
}
}
while (!max_pq.empty() && save[max_pq.top()] == 0){
max_pq.pop();
}
while (!min_pq.empty() && save[min_pq.top()] == 0){
min_pq.pop();
}
if (max_pq.empty() && min_pq.empty()){
cout << "EMPTY" << "\n";
}
else{
cout << max_pq.top() << " " << min_pq.top() << "\n";
}
}
return 0;
}