초콜릿 먹기

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

요약
정해진 순서의 초콜릿 N개를 D일 동안 나누어 먹어, 밤마다 절반으로 줄어드는 행복도의 최솟값을 최대화한다.
난이도

보통10점 중 7점

유형
이분 탐색, 그리디, 시뮬레이션, 구현
정답자
아직 제출이 없습니다

문제

Bessie가 초콜릿 NN개(1≤N≤500001 \le N \le 50000)를 받았습니다. 하지만 너무 빨리 먹고 싶지는 않아서, 앞으로 DD일(1≤D≤500001 \le D \le 50000) 동안 먹을 계획을 세워 그 기간의 하루하루 행복도 중 최솟값을 최대로 만들고자 합니다.

Bessie의 행복도는 정수이며 00에서 시작합니다. 잠을 자는 매일 밤마다 행복도는 절반으로 줄어들며, 나누어떨어지지 않으면 내림합니다. ii번째 초콜릿을 먹으면 행복도가 정수 HiH_i(1≤Hi≤10000001 \le H_i \le 1000000)만큼 증가합니다. 어떤 날에 초콜릿을 하나 이상 먹었다면, 그날의 행복도는 초콜릿을 모두 먹은 뒤의 값(잠들기 직전의 행복도)으로 봅니다. Bessie는 받은 순서대로만 초콜릿을 먹을 수 있으며, 하루에 초콜릿을 몇 개든(0개 포함) 먹을 수 있습니다.

예를 들어 행복도가 각각 (10,40,13,22,7)(10, 40, 13, 22, 7)인 초콜릿 55개를 55일에 걸쳐 먹는다고 합시다. 다음은 최적인 한 가지 계획에서의 하루별 행복도입니다.

날기상 시 행복도먹어서 얻은 행복도취침 시 행복도
1010 + 4050
225—25
3121325
4122234
517724

여기서 취침 시 행복도의 최솟값은 2424이며, 어떤 계획으로도 이 최솟값을 더 크게 만들 수 없으므로 정답은 2424입니다.

입력

  • 첫째 줄: 공백으로 구분된 두 정수 NN과 DD.
  • 둘째 줄부터 N+1N+1째 줄까지: i+1i+1째 줄에 정수 HiH_i가 하나 주어집니다.

출력

  • 한 정수를 출력합니다: DD일 동안 Bessie의 취침 시 행복도의 최솟값이 가질 수 있는 가장 큰 값.

예제2

  1. 예제 1

    입력
    5 5
    10
    40
    13
    22
    7
    
    예상 출력
    24
    
  2. 예제 2

    입력
    3 1
    10
    20
    30
    
    예상 출력
    60