자료 구조의 왕

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

요약
격자에서 직선 경로를 따라 잔디를 제거하는 로봇을 시뮬레이션하며 칸의 상태와 남은 잔디 수를 답한다.
난이도

어려움10점 중 8점

유형
유니온 파인드, 시뮬레이션, 구현
정답자
아직 제출이 없습니다

문제

흐즈로는 어느 날 집 주변 잔디밭에 무성히 자란 잔디를 보고, 새로 산 잔디깎이 로봇의 성능을 시험해 보기로 했습니다. 잔디밭은 nn개의 행과 mm개의 열을 가진 2차원 격자로 구성되어 있으며, 그 중 rr번째 행의 cc번째 열에 해당하는 칸을 (r,c)(r,c)로 표기합니다. 초기에 잔디밭의 모든 칸에는 잔디가 있습니다.

잔디깎이 로봇에 네 정수 d_yd\_y, d_xd\_x, yy, xx를 입력하면, 초기에 (y,x)(y,x) 에서 출발하여 ⟨d_y,d_x⟩\langle d\_y,d\_x \rangle 방향으로 이동하도록 설정됩니다. 이때 ∣d_y∣+∣d_x∣=1|d\_y|+|d\_x|=1이 항상 성립해야 합니다. 다시 말해, 잔디깎이 로봇은 항상 일정한 방향을 따라 이동하며, 상하좌우로 인접한 칸으로만 이동합니다. 잔디깎이 로봇은 다음과 같이 작동합니다.

  1. (y,x)(y,x)에 잔디가 없다면 잔디 깎기를 종료합니다.
  2. (y,x)(y,x)에 있는 잔디를 제거합니다.
  3. 조건 y+d_y<1y+d\_y<1, y+d_y>ny+d\_y>n, x+d_x<1x+d\_x<1, x+d_x>mx+d\_x>m 중 하나 이상이 참이라면 잔디 깎기를 종료합니다.
  4. (y,x)(y, x)를 (y+d_y,x+d_x)(y+d\_y, x+d\_x)로 변경한 뒤, 1번으로 돌아갑니다.

흐즈로는 성능 시험의 일환으로 다음과 같은 쿼리 QQ개에 대한 답을 찾아야 합니다.

  • 1 d_y d_x y x1 \ d\_y \ d\_x \ y \ x: 방향이 ⟨d_y,d_x⟩\langle d\_y,d\_x \rangle로 설정된 잔디깎이 로봇을 (y,x)(y,x)에서 출발시킨 뒤, 해당 잔디깎이 로봇의 잔디 깎기가 끝날 때까지 대기합니다.
  • 2 y x2 \ y \ x: 쿼리가 들어오기 전 시작한 잔디 깎기가 순서대로 끝나고 난 뒤 (y,x)(y,x)의 상태를 출력합니다. (y,x)(y,x)에 잔디가 있다면 상태는 00, 잔디가 없다면 상태는 11입니다.
  • 33: 잔디밭에 잔디가 남아있는 칸의 개수를 출력합니다.

모든 쿼리에 대해 정확한 답을 알지 못하면 잔디깎이 로봇이 제대로 작동하는지 확인할 수 없습니다. 주어진 QQ개의 쿼리에 대해 정확히 대답하는 프로그램을 작성해 주세요.

입력

첫 번째 줄에 행의 개수 nn, 열의 개수 mm, 쿼리의 개수 QQ가 공백으로 분리되어 주어집니다. (1≤n,m≤10001 \le n,m \le 1000, 1≤Q≤2×1051 \le Q \le 2\times 10^5)

두 번째 줄부터 QQ개의 줄에 걸쳐 쿼리가 한 줄에 하나씩 주어집니다. 모든 쿼리는 본문에서 주어진 종류 중 하나입니다.

모든 쿼리에 대해 1≤y≤n1 \le y \le n, 1≤x≤m1 \le x \le m이며, 모든 11번 쿼리에 대해 ∣d_y∣+∣d_x∣=1|d\_y|+|d\_x|=1입니다.

출력

모든 22, 33번 쿼리에 대해 정답을 한 줄에 하나씩 출력합니다.

예제1

  1. 예제 1

    입력
    3 3 8
    3
    2 2 2
    1 1 0 1 2
    1 0 -1 3 3
    2 2 2
    2 3 3
    2 3 1
    3
    
    예상 출력
    9
    0
    1
    1
    0
    5