Problem
https://www.acmicpc.net/problem/7662
7662번: 이중 우선순위 큐
입력 데이터는 표준입력을 사용한다. 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터의 첫째 줄에는 Q에 적
www.acmicpc.net
Solve
- 반복자 이동은 advance로 활용
- iter->second-- 로 직관적으로 value 증가 가능
#include <iostream>
#include <map>
using namespace std;
class solution
{
public:
map<int, int> m;
void ins(const int& num)
{
m[num]++;
}
void era(const int& num)
{
if (m.empty())
{
return;
}
if (num == 1)
{
map<int, int>::iterator iter = m.end();
advance(iter, -1);
if (iter->second == 1)
{
int key = iter->first;
m.erase(key);
}
else
{
iter->second--;
}
}
else if (num == -1)
{
map<int, int>::iterator iter = m.begin();
if (iter->second == 1)
{
int key = iter->first;
m.erase(key);
}
else
{
iter->second--;
}
}
}
void print()
{
if (m.empty())
{
cout << "EMPTY" << '\n';
}
else
{
map<int, int>::iterator be = m.begin();
map<int, int>::iterator en = m.end();
advance(en, -1);
cout << en->first << " " << be->first << '\n';
m.clear();
}
}
void solve()
{
int T;
cin >> T;
for (int i = 0; i < T; i++)
{
int k;
cin >> k;
for (int i = 0; i < k; i++)
{
char ch;
int num;
cin >> ch >> num;
switch (ch)
{
case 'I':
ins(num);
break;
case 'D':
era(num);
break;
default:
break;
}
}
print();
}
}
};
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
solution sol;
sol.solve();
return 0;
}
'C++ > 백준 문제풀이' 카테고리의 다른 글
[막대기 - 백준] / stack, 자료구 (1) | 2023.05.16 |
---|---|
[후위 표기식2 - 백준] / Stack, queue (0) | 2023.05.05 |
C++ [비밀번호 찾기_백준] / #map #자료구조 (0) | 2023.04.07 |
C++ [키로거_백준] / #stack #자료구조 (0) | 2023.04.07 |
C++ [여행가자 - 백준] / #분리집합 (1) | 2023.04.07 |