아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

일자 빗자루로 방 쓸기

시간 제한10초메모리 제한256 MB

요약
옆으로 미는 세로 빗자루로 모든 빈 칸을 닦을 수 있는 가장 긴 길이를 구하고 최소 쓸기 횟수를 구합니다.
난이도

어려움10점 중 8점

유형
그리디, 구간, 누적 합, 정렬
정답자
아직 제출이 없습니다

문제

코딩에 빠져 지내는 사이 방에 먼지가 쌓였다. 부모님이 알아차리기 전에 방을 쓸어야 한다.

방은 NN행 MM열 격자로 나타낸다. 각 칸에는 가구가 놓여 있거나, 비어 있어서 쓸어야 한다. 빈 칸은 적어도 하나 있다.

청소에는 일자 빗자루를 쓴다. 길이가 XX인 일자 빗자루는 한 열에서 세로로 연속한 XX칸을 덮는다. 한 번의 쓸기는 빗자루를 내려놓고 가로 방향으로 원하는 거리만큼 미는 것이며, 미는 거리는 0이어도 된다. 쓸기가 진행되는 동안 빗자루는 항상 방 안에 완전히 들어 있어야 하고, 빗자루가 덮는 XX칸은 모두 비어 있어야 한다. 쓸기 도중 빗자루가 지나간 칸에서는 먼지가 사라진다.

빗자루는 길수록 좋으므로 방 전체를 쓸 수 있는 가장 긴 빗자루를 산다. 빈 칸이 모두 한 번 이상 쓸기에 포함되면 방을 전부 쓴 것이다. 빗자루 길이를 정한 다음에는 쓸기 횟수도 최소로 줄이려 한다.

입력

첫 줄에 행의 수 NN, 열의 수 MM, 가구의 개수 FF가 주어진다. (1≤N≤20001 \le N \le 2000, 1≤M≤20001 \le M \le 2000, 1≤F<NM1 \le F < NM)

다음 FF개의 줄에는 가구 하나의 행 번호 rr과 열 번호 cc가 주어진다. (1≤r≤N1 \le r \le N, 1≤c≤M1 \le c \le M) 같은 좌표에 두 가구가 놓이는 경우는 없다.

출력

첫 줄에 살 수 있는 가장 긴 빗자루의 길이를 출력한다.

둘째 줄에 그 빗자루로 빈 칸을 모두 쓸 때 필요한 쓸기 횟수의 최솟값을 출력한다.

예제4

  1. 예제 1

    입력
    5 7 2
    3 4
    5 7
    
    예상 출력
    2
    4
    
  2. 예제 2

    입력
    1 2 1
    1 1
    
    예상 출력
    1
    1
    
  3. 예제 3

    입력
    5 3 2
    1 2
    3 3
    
    예상 출력
    2
    4
    
  4. 예제 4

    입력
    6 1 1
    3 1
    
    예상 출력
    2
    3