집 구하기

시간 제한2초메모리 제한512 MB

요약
직선 위에 k가지 종류의 시설이 있을 때, 각 종류별 가장 가까운 시설까지의 거리 중 최댓값을 최소로 하는 정수 위치를 찾고, 그러한 위치가 여럿이면 가장 작은 값을 출력한다.
난이도

보통10점 중 7점

유형
이분 탐색, 정렬, 투 포인터
정답자
아직 제출이 없습니다

문제

아크미는 중간 규모의 도시로, 서쪽에서 동쪽으로 길게 뻗은 중앙로가 하나 있다. 슈퍼마켓, 학교, 기차역, 버스 정류장, 병원처럼 아크미의 모든 시설은 이 중앙로에 있다. 당신은 중앙로에 있는 집을 하나 빌리려 하고, 집을 고를 때 위치를 가장 중요하게 본다. 특히 시설 종류 kk개를 목록으로 정해 두고 각 종류까지의 거리를 되도록 줄이고 싶다. 예를 들어 슈퍼마켓을 중요하게 여겨 목록에 넣었다면 집이 슈퍼마켓 가까이에 있기를 바란다.

k=1k = 1이면 원하는 종류의 시설 바로 앞에 집을 빌리면 되므로 문제가 쉽다. 하지만 k>1k > 1인 일반적인 경우에는 이 방법이 통하지 않는다.

중앙로에 놓인 kk가지 종류의 시설 nn개가 주어질 때, 각 종류에서 가장 가까운 시설까지의 거리 중 최댓값을 가장 작게 만드는 집의 위치를 찾는 프로그램을 작성하라. 중앙로에 있는 건물의 위치는 −1000000000-1000000000 이상 10000000001000000000 이하의 정수로 나타내고, 위치 번호가 작을수록 서쪽에 있다. 두 건물 사이의 거리는 두 위치 번호의 차이다. 같은 위치에 시설이 둘 이상 있을 수 있고, kk가지 종류마다 시설이 적어도 하나씩 있다. 모든 정수 위치에는 빌릴 수 있는 빈집이 적어도 하나 있다.

입력

첫 줄에 정수 kk와 nn이 주어진다 (1≤k≤1000001 \le k \le 100000, k≤n≤1000000k \le n \le 1000000). kk는 시설 종류의 수, nn은 중앙로에 있는 시설의 수다.

다음 nn개 줄에는 시설마다 위치와 종류가 정수 두 개로 주어진다. 첫 번째 정수는 −1000000000-1000000000 이상 10000000001000000000 이하인 중앙로 위의 위치이고, 두 번째 정수는 11 이상 kk 이하인 종류다.

출력

집을 빌리기에 가장 좋은 위치를 정수 하나로 한 줄에 출력한다. 가장 좋은 위치가 둘 이상이면 그중 가장 작은 위치 번호를 출력한다.

예제3

  1. 예제 1

    입력
    1 5
    -100 1
    -10 1
    0 1
    1 1
    2 1
    
    예상 출력
    -100
    
  2. 예제 2

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

    입력
    3 6
    0 1
    6 2
    7 3
    0 2
    1 3
    5 1
    
    예상 출력
    0