https://www.acmicpc.net/problem/7662
7662번: 이중 우선순위 큐
입력 데이터는 표준입력을 사용한다. 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터의 첫째 줄에는 Q에 적
www.acmicpc.net
우선순위 큐와 map을 이용하여 풀었다.
가장 먼저 maxQ와 minQ를 모두 만들어 데이터를 넣은 후 데이터를 삭제 할땐 maxQ와 minQ모두 삭제 해야 하므로 map을 이용하여 if(map == 0)일때 데이터를 삭제해줬다.
#include <bits/stdc++.h>
#define l long long
#define INF 2e9
#define p pair<int,int>
#define vc vector<int>
#define F first
#define S second
using namespace std;
int main() {
ios_base::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);
int t,k,n;
char c;
cin >> t;
while(t--){
unordered_map<int,int> check;
priority_queue<int,vc,greater<>> MinQ; // 오름 차순
priority_queue<int,vc,less<>> MaxQ; // 내림차순
cin >> k;
for(int i=0;i<k;i++) {
cin >> c >> n;
if (c == 'I') {
check[n]++;
MinQ.push(n);
MaxQ.push(n);
}
else {
if (n == 1) {
while(!MaxQ.empty() && check[MaxQ.top()] == 0) MaxQ.pop();
if(MaxQ.empty()) continue;
check[MaxQ.top()]--, MaxQ.pop();
}
else if (n == -1) {
while(!MinQ.empty() && check[MinQ.top()] == 0) MinQ.pop();
if(MinQ.empty()) continue;
check[MinQ.top()]--, MinQ.pop();
}
}
}
while(!MaxQ.empty() && check[MaxQ.top()] == 0) MaxQ.pop();
while(!MinQ.empty() && check[MinQ.top()] == 0) MinQ.pop();
if(MaxQ.empty() && MinQ.empty()) cout << "EMPTY\n";
else cout << MaxQ.top() << " " << MinQ.top() << "\n";
}
}
'baekjoon' 카테고리의 다른 글
15685번 드래곤 커브 (0) | 2022.04.01 |
---|---|
14499번 주사위 굴리기 (0) | 2022.03.31 |
17404번 RGB거리 2 (0) | 2022.03.27 |
2887번 행성 터널 (0) | 2022.03.27 |
4386번 별자리 만들기 (0) | 2022.03.25 |