• toc {:toc}

๐Ÿ“ฆ7662: PriorityQueue


[์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ’€์ด] ๊ฐ•๋™๊ทœ
Reviewed by Kade Kang (devkade12@gmail.com)
Reviewed:: 2024-02-05
๋ฌธ์ œ ํ™•์ธํ•˜๊ธฐ

ํ’€์ด

  • priority_queue๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ’€์ดํ–ˆ๋‹ค.
  • max, min ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ๋งŒ๋“ ๋‹ค.
  • pushํ•  ๋•Œ๋Š” ๋ชจ๋‘ min, max ๋ชจ๋‘์— pushํ•œ๋‹ค.
  • popํ•  ๋•Œ -1์ผ ๋•Œ๋Š” min, 1์ผ ๋•Œ๋Š” max์—์„œ popํ•œ๋‹ค. ์ด๋•Œ ๊ฐ๊ฐ popํ•˜์ง€ ์•Š์€ ํ(1์ผ ๋•Œ๋Š” min, -1์ผ ๋Œ€๋Š” max)์—์„œ๋Š” ์—ฌ์ „ํžˆ ๊ฐ’์ด ๋‚จ์•„ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ์ฒดํฌํ•˜๊ณ  ์ œ๊ฑฐํ•ด์ค€๋‹ค.
#include <iostream>
#include <queue>
#include <map>
#define endl '\n'
using namespace std;
 
priority_queue<int> max_q;
priority_queue<int, vector<int>, greater<int>> min_q;
map<int, int> ckpt;
 
 
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
 
    int T, k, val;
    char ch;
 
    cin >> T;
 
    while(T--){
        while(!max_q.empty()) max_q.pop();
        while(!min_q.empty()) min_q.pop();
        ckpt.clear();
        cin >> k;
        while(k--){
            cin >> ch >> val;
 
            if (ch=='I'){
                max_q.push(val);
                min_q.push(val);
                ckpt[val]++;
            }
            else{
                if (val==1){
                    if (!max_q.empty()){
                        ckpt[max_q.top()]--;
                        max_q.pop();
                    }
                }
                else{
                    if (!min_q.empty()){
                        ckpt[min_q.top()]--;
                        min_q.pop();
                    }
                }
                while(!min_q.empty() && ckpt[min_q.top()]==0)
                    min_q.pop();
                while(!max_q.empty() && ckpt[max_q.top()]==0)
                    max_q.pop();
            }
        }
        if (max_q.empty() || min_q.empty()) {
            cout << "EMPTY" << endl;
        }
        else{
            cout << max_q.top() << ' ' << min_q.top() << endl;
        }
    }
 
    return 0;
}