실의 매듭

면접 대비

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

요약
주어진 n개의 구간 각각에 정수 위치의 매듭을 하나씩 놓아 가장 가까운 두 매듭 사이 거리를 최대화하고, 그 최댓값을 출력한다.
난이도

보통10점 중 7점

유형
이분 탐색, 그리디, 정렬, 구간
정답자
아직 제출이 없습니다

문제

x축 위에 n개의 실이 있다. i번째 실 Ti의 길이는 li, 시작점의 위치는 xi이며 둘 다 정수이다. 각 실에 매듭을 하나씩 만들려고 한다. 매듭의 위치도 정수여야 한다. 매듭은 실 위의 임의의 점에 만들 수 있으며, 매듭을 만들어도 실의 길이는 줄어들지 않는다고 가정한다. 어떤 실도 다른 실에 완전히 포함되지 않는다. 즉, xj ≤ xi이고 xi+li ≤ xj+lj인 두 실 Ti와 Tj (i ≠ j)는 존재하지 않는다.

가장 가까운 두 매듭 사이의 거리를 최대한 크게 만들기 위해 각 실의 매듭 위치를 정하려고 한다.

예를 들어, 아래 그림은 여섯 개의 실에 매듭을 만든 위치를 나타낸다. 매듭의 위치는 점으로 표시한다. 모든 실은 실제로 x축 위에 놓여 있지만, 서로 구별하기 위해 따로 그렸다. 그림 I.1에서 가장 가까운 두 매듭 사이의 거리는 20이다. 그러나 그림 I.2처럼 T2의 매듭을 다른 위치에 만들면 가장 가까운 두 매듭 사이의 거리가 25가 되며, 이것이 이 문제에서 구하려는 값이다.

그림 I.1: 여섯 개의 실에 매듭을 만든 예.

그림 I.2: T2의 매듭 위치를 다르게 한 또 다른 예.

n개의 실에 대한 정보가 주어질 때, 가장 가까운 두 매듭 사이의 거리의 최댓값을 계산하는 프로그램을 작성하라.

입력

프로그램은 표준 입력에서 데이터를 읽는다. 입력의 첫째 줄에는 실의 개수 n (2 ≤ n ≤ 100,000)이 주어진다. 다음 n개 줄 중 i번째 줄에는 두 정수 xi (0 ≤ xi ≤ 109)와 li (1 ≤ li ≤ 109)가 주어지며, xi와 li는 각각 i번째 실의 시작점 위치와 길이를 나타낸다. 어떤 실도 다른 실에 완전히 포함되지 않는다. 즉, xj ≤ xi이고 xi+li ≤ xj+lj인 두 실 Ti와 Tj (i ≠ j)는 존재하지 않는다.

출력

프로그램은 표준 출력에 결과를 쓴다. 정확히 한 줄을 출력한다. 그 줄에는 가장 가까운 두 매듭 사이의 거리의 최댓값을 나타내는 정수가 들어가야 한다.

예제3

  1. 예제 1

    입력
    6
    0 67
    127 36
    110 23
    50 51
    100 12
    158 17
    
    예상 출력
    25
    
  2. 예제 2

    입력
    6
    0 40
    10 55
    45 28
    90 40
    83 30
    120 30
    
    예상 출력
    30
    
  3. 예제 3

    입력
    3
    0 20
    40 10
    100 20
    
    예상 출력
    50