만드는 중입니다

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

자료 구조의 왕

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

요약
격자에서 로봇이 한 방향으로 움직이며 지나는 칸의 풀을 없애고, 칸별 풀 유무와 남은 풀의 개수를 질의에 맞춰 출력합니다.
난이도

보통10점 중 6점

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

문제

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

잔디깎이 로봇에 정수 dyd_y, dxd_x, yy, xx를 입력하면, 로봇은 (y,x)(y,x)에서 출발해 ⟨dy,dx⟩\langle d_y,d_x \rangle 방향으로 이동하도록 설정됩니다. 이때 ∣dy∣+∣dx∣=1|d_y|+|d_x|=1이 항상 성립합니다. 즉, 로봇은 일정한 방향을 따라 상하좌우로 인접한 칸으로만 이동합니다. 로봇은 다음과 같이 작동합니다.

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

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

  • 1 dy dx y x1 \ d_y \ d_x \ y \ x: 방향이 ⟨dy,dx⟩\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번 쿼리에 대해 ∣dy∣+∣dx∣=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