질의
시간 제한10초메모리 제한128 MB
삭제 연산이 이어지는 점 집합에서 현재 가장 높은 y에서 S 이내 후보 중 가장 왼쪽 점을 찾고 x가 같으면 더 높은 점을 고릅니다.
문제
점들의 집합 Z 와 "허용치" S 가 주어질 때, 두 종류의 연산을 처리하는 프로그램을 작성한다.
- 삭제: 집합 Z 에서 주어진 점을 제거한다.
- 탐색: 집합 Z 의 "좌상단 점"을 찾는다.
좌상단 점은 다음과 같이 정한다. 현재 집합 Z 에 있는 점들 중 가장 큰 좌표를 라 하자. 좌표가 보다 많아야 S 만큼 작은 점, 즉 를 만족하는 점들을 후보로 둔다. 후보 중에서 좌표가 가장 작은(가장 왼쪽에 있는) 점이 좌상단 점이다. 그런 점이 여럿이면 그중 좌표가 가장 큰(가장 위에 있는) 점을 택한다.
입력
첫 줄에 테스트 케이스의 수 가 주어진다 (). 이어서 각 테스트 케이스가 차례로 주어진다.
각 테스트 케이스의 첫 줄에는 공백으로 구분된 두 정수 과 가 주어진다 (, ). 각각 집합 Z 의 초기 크기와 허용치를 뜻한다. 다음 개의 줄에는 집합 Z 에 속한 점이 한 줄에 하나씩, 공백으로 구분된 두 정수 와 로 주어진다 (). 한 테스트 케이스 안의 점들은 서로 다르다.
그다음 줄에는 수행할 연산의 수 이 주어진다 (). 이어지는 개의 줄은 각각 다음 두 형태 중 하나이다.
USUN: 점 를 집합 Z 에서 삭제한다.ZNAJDZ: 좌상단 점을 탐색한다.
삭제 연산에서 지정한 점은 그 시점에 반드시 집합 Z 안에 있다. 탐색 연산은 집합 Z 가 비어 있을 때는 호출되지 않는다.
출력
각 탐색(ZNAJDZ) 연산마다 찾은 점의 좌표를 x y 형식으로 한 줄에 하나씩 출력한다.