만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

안티챔버

시간 제한5초메모리 제한1024 MB

요약
칸을 색칠할 때마다 떨어져 나간 조각을 지우고 구멍을 메우는 격자에서, 같은 성분인지와 성분 크기를 온라인으로 답합니다.
난이도

어려움10점 중 10점

유형
유니온 파인드, 시뮬레이션, 동적 계획법
정답자
아직 제출이 없습니다

문제

게임은 무한한 격자판에서 진행된다. 각 칸은 흰색 또는 검은색이다. 변을 공유하는 두 칸을 인접하다고 한다. 연결된 검은 칸들의 극대 집합을 컴포넌트라고 한다. 컴포넌트의 크기는 그 안에 있는 칸의 개수다.

브릭 도구를 쓰면 플레이어가 임의의 칸을 반대 색으로 칠할 수 있다. 칠한 직후에 다음 검사가 실행되며, 격자판의 상태가 바뀔 수 있다.

칸을 흰색으로 칠했고 컴포넌트 개수가 늘었다면, 어떤 컴포넌트가 여러 부분 컴포넌트로 나뉜 것이다. 이때 새로 생긴 부분 컴포넌트는 가장 큰 것 하나를 제외하고 모두 제거된다. 가장 큰 부분 컴포넌트는 크기가 나머지 부분 컴포넌트 크기의 합보다 엄격하게 클 때에만 남는다. 컴포넌트를 제거한다는 것은 그 안의 모든 칸을 흰색으로 칠한다는 뜻이다.

다음으로, 칠한 칸의 색과 관계없이 컴포넌트의 구멍을 없앤다. 검은 칸들로 이루어진 사이클 안에 흰 칸이 있으면 그 칸을 검은색으로 바꾼다. 사이클에서 이웃한 두 칸은 위에서 정의한 인접 관계를 만족해야 한다.

처음에는 모든 칸이 흰색이다. 주어진 순서대로 실행해야 하는 연산 목록이 주어진다. 연산은 칠하기 또는 질의 중 하나다. 질의는 두 종류다. Comp 질의는 주어진 두 칸이 모두 검은색이고 같은 컴포넌트에 속하는지 묻는다. Size 질의는 주어진 칸이 속한 컴포넌트의 크기를 구한다. 그 칸이 흰색이면 답은 0이다.

입력

첫 줄에 정수 NN이 주어진다. 이는 칠하기와 질의의 총 개수이며 1≤N≤1051 \le N \le 10^5이다. 이어지는 NN개의 줄에 연산이 하나씩 주어진다.

  • Draw xx yy: 좌표 (x,y)(x, y)의 칸을 반대 색으로 칠한다.
  • Size xx yy: 좌표 (x,y)(x, y)의 칸이 속한 컴포넌트의 크기를 구한다.
  • Comp x1x_1 y1y_1 x2x_2 y2y_2: 좌표 (x1,y1)(x_1, y_1)과 (x2,y2)(x_2, y_2)의 칸이 같은 컴포넌트에 속하는지 구한다.

모든 좌표는 10610^6 이하의 양의 정수다.

출력

질의의 답을 입력에 나온 순서대로 한 줄에 하나씩 출력한다. Size 질의의 답은 정수다. Comp 질의의 답은 YES 또는 NO다.

힌트

아래 그림의 숫자는 브릭 도구를 사용한 횟수다.

그림설명
14번째 사용 후의 격자판
15번째 사용은 격자판을 바꾸지 않는다.
18번째 사용 후의 격자판
21번째 사용 후 모든 칸이 다시 흰색이 된다.

예제1

  1. 예제 1

    입력
    38
    Draw 2 2
    Draw 2 3
    Draw 2 4
    Draw 2 5
    Draw 2 6
    Draw 3 6
    Draw 4 6
    Draw 5 5
    Draw 5 4
    Draw 4 4
    Draw 4 2
    Size 4 2
    Size 2 4
    Size 4 4
    Size 3 3
    Comp 2 2 2 4
    Comp 2 2 4 4
    Comp 3 3 4 4
    Draw 3 2
    Draw 4 3
    Size 2 2
    Draw 5 6
    Size 2 2
    Draw 3 3
    Size 3 3
    Comp 3 3 4 4
    Draw 2 4
    Draw 3 4
    Draw 4 4
    Size 3 2
    Size 3 6
    Draw 4 7
    Draw 3 5
    Size 2 5
    Draw 4 6
    Size 2 5
    Size 4 5
    Size 4 7
    
    예상 출력
    1
    7
    3
    0
    YES
    NO
    NO
    13
    18
    18
    YES
    0
    9
    9
    0
    0
    0