만드는 중입니다

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

먼지 청소기

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

요약
행과 열을 청소하면 먼지가 0으로 바뀌는 N×M 격자에서, 먼지량이 k 이하인 칸만 지나는 두 칸 사이의 최단 거리를 구합니다.
난이도

어려움10점 중 9점

유형
그래프, 최단 경로, 세그먼트 트리
정답자
아직 제출이 없습니다

문제

Paolo는 큰 창고의 관리인으로 일한다. 그의 업무 중 두 가지는 청소기를 돌리는 것과 창고 안의 물건을 옮기는 것이다. Paolo는 청소에 대해 실용적인 편이라, 먼지가 너무 쌓여 물건을 더 이상 옮길 수 없게 될 때까지 기다린다. 상황을 더 나쁘게 만드는 것은 그가 최근 직접 청소하는 대신 로봇 청소기를 풀어놓기 시작했다는 점이다. 이 로봇 청소기는 고장 나서 방향을 바꿀 수 없다. 벽에 부딪혀 배터리가 다할 때까지 직선으로만 움직인다.

창고는 N×MN \times M 격자로 나타낼 수 있다. 행은 1번부터 NN번까지, 열은 1번부터 MM번까지 번호가 매겨져 있다. 처음에는 모든 칸의 먼지가 0 단위이다. 이후 QQ일이 지나간다. 매일은 모든 칸의 먼지가 1씩 늘어나면서 시작한다. 그다음 아래 세 가지 중 정확히 하나가 일어난다.

  1. 11 rr 형태의 사건은 Paolo가 rr번 행을 따라 로봇 청소기를 풀어놓는다는 뜻이다. 그러면 그 행의 모든 칸의 먼지가 0이 된다.
  2. 22 cc 형태의 사건은 Paolo가 cc번 열을 따라 로봇 청소기를 풀어놓는다는 뜻이다. 그러면 그 열의 모든 칸의 먼지가 0이 된다.
  3. 33 r1r_1 c1c_1 r2r_2 c2c_2 kk 형태의 사건은 Paolo가 (r1,c1)(r_1, c_1) 칸에서 (r2,c2)(r_2, c_2) 칸으로 무언가를 옮겨야 한다는 뜻이다. kk는 그 물건의 먼지 내성이다. 물건은 먼지가 kk 단위 이하인 칸 위로만 옮길 수 있다. 예를 들어 (r1,c1)(r_1, c_1) 또는 (r2,c2)(r_2, c_2) 칸의 먼지가 kk 단위를 넘으면 이 임무는 완료할 수 없다.

3번 사건마다 Paolo가 물건을 옮기는 데 필요한 최소 걸음 수를 출력한다. 한 걸음에는 변을 공유하는 인접한 칸으로 이동한다. 가장자리에 있는 칸은 인접한 칸이 네 개보다 적다. 물건을 옮길 수 없다면 −1-1을 출력한다.

입력

첫 줄에 세 정수 NN, MM, QQ가 주어진다 (1≤N,M≤1061 \leq N,M \leq 10^6, 1≤Q≤3⋅1051 \leq Q \leq 3 \cdot 10^5).

이어지는 QQ개의 줄은 각각 하나의 사건을 나타낸다. 각 줄은 사건의 종류 tt로 시작하며, tt는 1, 2, 3 중 하나이다. t=1t = 1이면 같은 줄에 행 번호 rr (1≤r≤N1 \leq r \leq N)이 주어진다. t=2t = 2이면 열 번호 cc (1≤c≤M1 \leq c \leq M)가 주어진다. t=3t = 3이면 같은 줄에 r1r_1, c1c_1, r2r_2, c2c_2, kk의 다섯 정수가 주어진다 (1≤r1,r2≤N1 \leq r_1, r_2 \leq N, 1≤c1,c2≤M1 \leq c_1, c_2 \leq M, 0≤k≤Q0 \leq k \leq Q).

종류 3의 사건마다 (r1,c1)(r_1, c_1)과 (r2,c2)(r_2, c_2)는 서로 다른 칸이다. 종류 3의 사건은 적어도 하나 있다.

출력

종류 3의 사건마다 물건을 옮기는 데 필요한 최소 걸음 수를 한 줄에 출력한다. 옮길 수 없다면 −1-1을 출력한다.

예제1

  1. 예제 1

    입력
    4 3 9
    3 2 1 3 3 1
    3 2 1 3 3 1
    2 1
    2 3
    1 1
    3 2 1 3 3 3
    3 2 1 3 3 3
    2 2
    3 2 1 3 3 6
    
    예상 출력
    3
    -1
    5
    -1
    3