마법사의 모자 걸기

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

요약
벽에 삼각형 모자를 거는 마법사들을 시뮬레이션하며, 못이 가려지는 규칙과 추방 조건을 고급 기하 자료구조로 처리해야 하는 문제입니다.
난이도

어려움10점 중 9점

유형
기하, 세그먼트 트리, 정렬, 시뮬레이션
정답자
아직 제출이 없습니다

문제

모든 마법사는 뾰족한 모자를 씁니다. 안 들리는 대학교(Unheard University)의 마법사들은 잠자리에 들기 전, 자신의 모자를 아주 커다란 공용 벽 하나에 걸어 둡니다. 모자의 모양은 넓은 것과 좁은 것 두 가지뿐입니다.

마법사들은 한 명씩 차례로 잠자리에 듭니다. ii번째 마법사는 잠들기 전에 자신의 모자를 들고 벽 위의 임의의 위치 (xi,yi)(x_i, y_i)를 고른 뒤(여기서 yi>0y_i > 0은 바닥으로부터의 높이입니다) 그 자리에 못을 박고 모자를 겁니다.

이 모자들은 마법에 걸려 있어서, 걸리는 순간 높이가 yiy_i인 이등변삼각형 모양이 됩니다. 삼각형의 꼭짓점은 못 (xi,yi)(x_i, y_i)에 있고 밑변은 바닥(y=0y = 0 직선) 위에 놓입니다. 좁은 모자의 밑변 길이는 yiy_i이고, 넓은 모자의 밑변 길이는 2yi2 y_i입니다. 다시 말해, 점 (x,y)(x, y)가 ii번째 모자의 내부(경계 포함)에 있으려면 0≤y≤yi0 \le y \le y_i이면서 다음을 만족해야 합니다.

∣x−xi∣≤yi−y2(좁은 모자),∣x−xi∣≤yi−y(넓은 모자).|x - x_i| \le \frac{y_i - y}{2} \quad (\text{좁은 모자}), \qquad |x - x_i| \le y_i - y \quad (\text{넓은 모자}).

모든 못 머리는 어둠 속에서 빛납니다. 어떤 못이 나중에 걸린 모자에 덮이는 순간 그 못은 더 이상 보이지 않습니다(모자의 경계에 놓이는 것도 덮인 것으로 칩니다). 또한, 어떤 마법사가 이미 걸려 있는 모자에 덮인 지점(경계 포함)에 못을 박으려 하면 그 마법사는 퇴학당하고 못과 모자는 모두 버려집니다. 그 모자는 걸리지 않습니다.

각 마법사가 행동한 직후, 현재 보이는 빛나는 못 머리의 개수를 출력하세요.

입력

첫 줄에 테스트 케이스의 수 ZZ (1≤Z≤301 \le Z \le 30)가 주어집니다. 이어서 ZZ개의 테스트 케이스가 차례로 주어집니다.

각 테스트 케이스의 첫 줄에는 마법사의 수 nn (1≤n≤1051 \le n \le 10^5)이 주어집니다. 이어지는 nn개의 줄에는 마법사들이 잠드는 순서대로 각 마법사의 정보가 주어지며, 각 줄에는 두 정수 xix_i (−109≤xi≤109-10^9 \le x_i \le 10^9)와 yiy_i (1≤yi≤1091 \le y_i \le 10^9), 그리고 모자의 모양을 나타내는 한 글자가 공백으로 구분되어 주어집니다. 넓은 모자는 W, 좁은 모자는 N으로 표시됩니다.

출력

각 테스트 케이스마다 nn개의 줄을 출력합니다. ii번째 줄에는, ii번째 마법사가 못을 박다가 퇴학당했다면 FAIL을 출력합니다. 그렇지 않다면 ii번째 마법사가 모자를 건 직후 보이는 빛나는 못 머리의 개수를 정수 하나로 출력합니다.

예제4

  1. 예제 1

    입력
    2
    3
    0 1 W
    0 2 N
    0 1 W
    7
    4 3 W
    8 8 N
    3 2 W
    9 5 W
    12 1 W
    14 2 N
    13 4 W
    
    예상 출력
    1
    1
    FAIL
    1
    2
    FAIL
    FAIL
    3
    4
    3
    
  2. 예제 2

    입력
    1
    1
    5 10 W
    
    예상 출력
    1
    
  3. 예제 3

    입력
    1
    2
    0 10 W
    9 1 W
    
    예상 출력
    1
    FAIL
    
  4. 예제 4

    입력
    2
    2
    5 1 N
    0 10 W
    2
    5 1 N
    0 10 N
    
    예상 출력
    1
    1
    1
    2