백준 7662번 이중 우선순위 큐 c++ 풀이

PBC·2024년 5월 7일
2

로직

https://www.acmicpc.net/problem/7662

솔직히 골드4 인게 이해가 안된다.

왜냐하면 그냥 multiset 쓰면 문제가 실버 3으로 보이기 때문이다.

multiset은 set의 중복이 없는 것이다.
그럼 거의 priority_queue와 비슷해지기 때문이다.
이 문제의 시간 제한은 무려 6초 multiset을 써도 충분히 괜찮다.

코드

#include <set>
#include <iostream>
using namespace std;

int main()
{
    int Test_case;
    cin >> Test_case;

    for (int i = 1; i <= Test_case; i++) {
        int n;
        multiset<int> s;

        cin >> n;
        for (int j = 1; j <= n; j++) {
            int value;
            char order;

            cin >> order >> value;
            if (order == 'I') {
                s.insert(value);
            } else if (order == 'D') {
                if (!s.empty()) {
                    multiset<int>::iterator starting = s.begin();
                    multiset<int>::iterator ending = s.end();
                    ending--;
                    if (value == -1) s.erase(starting);
                    else s.erase(ending);
                }
            }
        }
        if (s.empty()) cout << "EMPTY\n";
        else {
            multiset<int>::iterator starting = s.begin();
            multiset<int>::iterator ending = s.end();
            ending--;
            cout << *(ending) << " " << *(starting) << "\n";
        }
    }
}
profile
그냥 블로그 입니다 보지 마세요

0개의 댓글