← Back to List

7662번: 이중 우선순위 큐 ↗

Solutions

C++14
1.9 KB | 1996 chars
#include <iostream>
#include <string>
#include <algorithm>
#include <queue>
#include <map>
using namespace std;



int T,N;
string a;
int b;

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin >> T;
    while(T--) {
        map <int,int> M;
        map <int,int> M2;
        priority_queue <int ,vector<int> , less<int>> MaxQ;
        priority_queue <int, vector<int>, greater<int>> MinQ;
        cin >> N;
        for(int x = 0; x<N; x++) {
            cin >> a >> b;
            if(a == "I") {
                MaxQ.push(b);
                MinQ.push(b);
            }
            else {
                while(M.find(MaxQ.top()) != M.end() && M[MaxQ.top()] > 0) {
                    M[MaxQ.top()]-=1;
                    MaxQ.pop();
                }
                while(M2.find(MinQ.top()) != M2.end() && M2[MinQ.top()] > 0) {
                    M2[MinQ.top()]-=1;
                    MinQ.pop();
                }
                if(b==1) {
                    if(MaxQ.size()>0) {
                        int k = MaxQ.top();
                        if(M2.find(k) != M2.end()) M2[k] +=1;
                        else M2[k]=1;
                        MaxQ.pop();
                    }
                }
                else {
                    if(MinQ.size()>0) {
                        int k = MinQ.top();
                        if(M.find(k) != M.end()) M[k] +=1;
                        else M[k]=1;
                        MinQ.pop();
                    }
                }
            }
        }
        while(M.find(MaxQ.top()) != M.end() && M[MaxQ.top()] > 0) {
            M[MaxQ.top()]-=1;
            MaxQ.pop();
            }
        while(M2.find(MinQ.top()) != M2.end() && M2[MinQ.top()] > 0) {
            M2[MinQ.top()]-=1;
            MinQ.pop();
        }
        if(MaxQ.size() > 0 && MinQ.size() > 0) {
            cout << MaxQ.top() << " " << MinQ.top() << "\n";
        }
        else {
            cout<<"EMPTY\n";
        }
    }
}