이중 우선순위큐


답안 제출

Points: 12
시간 제한: 2.0s
메모리 제한: 1G

문제 유형

우선순위 큐(Priority Queue)는 가장 우선순위가 높은 하나의 원소만 빠르게 다룰 수 있다.

이번에는 최댓값과 최솟값을 모두 빠르게 찾아내고 삭제할 수 있는 "이중 우선순위 큐(Double-Ended Priority Queue)"를 구현하고자 한다.

비어 있는 이중 우선순위 큐에서 시작하여 \(N\)개의 명령을 처리하는 프로그램을 작성하시오.

명령의 종류는 다음과 같이 세 가지이다.

  • 1 x: 정수 \(x\)를 큐에 삽입한다. (동일한 정수가 여러 번 삽입될 수 있다.)
  • 2 1: 현재 큐에 있는 원소 중 최댓값을 삭제한다. 최댓값이 여러 개라면 그중 하나만 삭제한다. 만약 큐가 비어 있다면 이 명령은 무시한다.
  • 2 -1: 현재 큐에 있는 원소 중 최솟값을 삭제한다. 최솟값이 여러 개라면 그중 하나만 삭제한다. 만약 큐가 비어 있다면 이 명령은 무시한다.
  • 3: 현재 큐에 남아있는 최댓값과 최솟값을 공백으로 구분하여 한 줄에 출력한다. 만약 큐가 비어 있다면 EMPTY를 출력한다.

입력

첫째 줄에 명령의 수 \(N\)이 주어진다.

둘째 줄부터 \(N\)개의 줄에 명령이 하나씩 주어진다.

출력

3번 명령이 주어질 때마다 해당 명령의 결과를 한 줄에 하나씩 출력한다.

제한사항

  • \(1 \le N \le 100000\)
  • \(1\)번 명령으로 입력되는 정수 \(x\)는 \(-2 \times 10^9 \le x \le 2 \times 10^9\) 범위의 정수이다.
  • \(3\)번 명령은 최소 하나 이상 주어진다.

예제 입력 1

8
1 10
1 20
1 10
3
2 1
3
2 -1
3

예제 출력 1

20 10
10 10
10 10

코멘트

현재 작성된 코멘트가 없습니다.