아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

질의

시간 제한10초메모리 제한128 MB

요약
삭제 연산이 이어지는 점 집합에서 현재 가장 높은 y에서 S 이내 후보 중 가장 왼쪽 점을 찾고 x가 같으면 더 높은 점을 고릅니다.
난이도

보통10점 중 6점

유형
세그먼트 트리, 정렬
정답자
아직 제출이 없습니다

문제

점들의 집합 Z 와 "허용치" S 가 주어질 때, 두 종류의 연산을 처리하는 프로그램을 작성한다.

  • 삭제: 집합 Z 에서 주어진 점을 제거한다.
  • 탐색: 집합 Z 의 "좌상단 점"을 찾는다.

좌상단 점은 다음과 같이 정한다. 현재 집합 Z 에 있는 점들 중 가장 큰 yy 좌표를 ymax⁡y_{\max} 라 하자. yy 좌표가 ymax⁡y_{\max} 보다 많아야 S 만큼 작은 점, 즉 y≥ymax⁡−Sy \ge y_{\max} - S 를 만족하는 점들을 후보로 둔다. 후보 중에서 xx 좌표가 가장 작은(가장 왼쪽에 있는) 점이 좌상단 점이다. 그런 점이 여럿이면 그중 yy 좌표가 가장 큰(가장 위에 있는) 점을 택한다.

입력

첫 줄에 테스트 케이스의 수 TT 가 주어진다 (1≤T≤101 \le T \le 10). 이어서 각 테스트 케이스가 차례로 주어진다.

각 테스트 케이스의 첫 줄에는 공백으로 구분된 두 정수 NN 과 SS 가 주어진다 (1≤N≤1051 \le N \le 10^5, 0≤S≤1090 \le S \le 10^9). 각각 집합 Z 의 초기 크기와 허용치를 뜻한다. 다음 NN 개의 줄에는 집합 Z 에 속한 점이 한 줄에 하나씩, 공백으로 구분된 두 정수 PXP_X 와 PYP_Y 로 주어진다 (−109≤PX,PY≤109-10^9 \le P_X, P_Y \le 10^9). 한 테스트 케이스 안의 점들은 서로 다르다.

그다음 줄에는 수행할 연산의 수 MM 이 주어진다 (1≤M≤2⋅1051 \le M \le 2 \cdot 10^5). 이어지는 MM 개의 줄은 각각 다음 두 형태 중 하나이다.

  • USUN PXP_X PYP_Y : 점 (PX,PY)(P_X, P_Y) 를 집합 Z 에서 삭제한다.
  • ZNAJDZ : 좌상단 점을 탐색한다.

삭제 연산에서 지정한 점은 그 시점에 반드시 집합 Z 안에 있다. 탐색 연산은 집합 Z 가 비어 있을 때는 호출되지 않는다.

출력

각 탐색(ZNAJDZ) 연산마다 찾은 점의 좌표를 x y 형식으로 한 줄에 하나씩 출력한다.

예제3

  1. 예제 1

    입력
    1
    5 1
    1 1
    1 3
    2 2
    3 2
    3 3
    7
    ZNAJDZ
    USUN 1 3
    ZNAJDZ
    USUN 2 2
    ZNAJDZ
    USUN 3 3
    ZNAJDZ
    
    예상 출력
    1 3
    2 2
    3 3
    1 1
    
  2. 예제 2

    입력
    1
    4 0
    5 10
    2 10
    0 5
    7 10
    6
    ZNAJDZ
    USUN 2 10
    ZNAJDZ
    USUN 5 10
    USUN 7 10
    ZNAJDZ
    
    예상 출력
    2 10
    5 10
    0 5
    
  3. 예제 3

    입력
    2
    1 5
    0 0
    1
    ZNAJDZ
    3 3
    -3 2
    -3 7
    4 7
    5
    ZNAJDZ
    USUN -3 7
    ZNAJDZ
    USUN 4 7
    ZNAJDZ
    
    예상 출력
    0 0
    -3 7
    4 7
    -3 2