[백준] 7662 이중 우선순위 큐
2022. 7. 11. 21:31ㆍ알고리즘/백준
728x90
https://www.acmicpc.net/problem/7662
7662번: 이중 우선순위 큐
입력 데이터는 표준입력을 사용한다. 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터의 첫째 줄에는 Q에 적
www.acmicpc.net
1. I 일때 값을 넣어주고, 들어왔음을 확인시켜준다.
2. D일때는 값에다가 들어왔음을 표시해주고 최대값, 최소값에 맞게 POP해준다.
3. 출력은 들어왔음을 표시해준것은 다 pop을 해주고 top값에 있는 값을 출력하준다.
#include <iostream>
#include <queue>
#include <vector>
#include <deque>
#include <algorithm>
#include <functional>
using namespace std;
bool visited[1000001];
int T;
char ch;
int num;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> T;
for (int i = 0; i < T; i++) {
int k;
cin >> k;
priority_queue<pair<int, int>> pq_max;
priority_queue<pair<long long int, long long int>, vector<pair<long long int, long long int>>, greater<pair<long long int, long long int>>>pq_min;
for (int j = 0; j < k; j++) {
cin >> ch >> num;
if (ch == 'I') {
pq_max.push({ num , j });
pq_min.push({ num , j });
visited[j] = true;
}
else {
if (num == 1) {
{
while (!pq_max.empty() && !visited[pq_max.top().second]) {
pq_max.pop();
}
if (!pq_max.empty()) {
visited[pq_max.top().second] = false;
pq_max.pop();
}
}
}
else
{
while (!pq_min.empty() && !visited[pq_min.top().second])
{
pq_min.pop();
}
if (!pq_min.empty()) {
visited[pq_min.top().second] = false;
pq_min.pop();
}
}
}
}
while (!pq_max.empty() && !visited[pq_max.top().second])
pq_max.pop();
while (!pq_min.empty() && !visited[pq_min.top().second])
pq_min.pop();
if (pq_min.empty()&& pq_max.empty())
cout<< "EMPTY\n";
else
cout<< pq_max.top().first<< " " << pq_min.top().first<< "\n";
}
return 0;
}
728x90
'알고리즘 > 백준' 카테고리의 다른 글
백준 10026 적록색약(C++) (0) | 2023.04.06 |
---|---|
[백준] 10988 python 팰린드롬인지 확인하기 (3가지 방법) (0) | 2023.01.25 |
[백준] 11286 절댓값 힙 (c++) (0) | 2022.07.10 |
[백준] 연결 요소의 개수 c++ (0) | 2022.07.09 |
[백준] 1927 최소 힙 c++ (0) | 2022.07.08 |