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

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

빌딩 높이

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

요약
1번 건물의 높이가 0이고 이웃한 건물 높이 차가 K 이하일 때, M개의 높이 상한을 지키면서 세울 수 있는 가장 높은 건물의 높이를 구한다.
난이도

보통10점 중 6점

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

문제

빌딩 NN개를 일렬로 새로 짓는다. 왼쪽부터 차례대로 1번부터 NN번까지 번호를 붙인다.

빌딩 높이에는 다음 제한이 있다.

  • 모든 빌딩의 높이는 음이 아닌 정수이다.
  • 1번 빌딩의 높이는 0이다.
  • 이웃한 두 빌딩의 높이 차이는 KK 이하이다.
  • XiX_i번 빌딩의 높이는 TiT_i 이하이다.

제한을 모두 지키면서 지을 수 있는 가장 높은 빌딩의 높이를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 NN과 KK가 주어진다. (1≤N,K≤1091 \le N, K \le 10^9)

둘째 줄에 높이 제한이 걸린 빌딩의 개수 MM이 주어진다. (0≤M≤min⁡(N,500)0 \le M \le \min(N, 500))

MM이 1 이상이면 셋째 줄에 X1,X2,…,XMX_1, X_2, \dots, X_M이, 넷째 줄에 T1,T2,…,TMT_1, T_2, \dots, T_M이 공백으로 구분되어 주어진다. (1≤Xi≤N1 \le X_i \le N, 1≤Ti≤1091 \le T_i \le 10^9, Xi<Xi+1X_i < X_{i+1}) MM이 0이면 셋째 줄과 넷째 줄은 주어지지 않는다.

출력

제한을 모두 지키면서 지을 수 있는 가장 높은 빌딩의 높이를 출력한다.

예제3

  1. 예제 1

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

    입력
    1000000000 1000000000
    0
    
    예상 출력
    999999999000000000
    
  3. 예제 3

    입력
    20 3
    5
    4 7 13 15 18
    8 22 1 55 42
    
    예상 출력
    22