앤드루의 놀라운 건축

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

요약
각 열에 필요한 블록 길이가 주어질 때, 요구 길이 이상이면서 단조 증가 후 감소하는 높이 배열 중 부피 합이 최소가 되는 값을 구한다.
난이도

보통10점 중 7점

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

문제

Aaron은 블록을 많이 가지고 있고, Andrew에게 블록으로 구조물을 만들라고 했다. 모든 블록은 여러 가지 값 k에 대해 k × 1 × 1 크기이다. 구조물은 n개의 비어 있지 않은 열이 순서대로 나열된 형태여야 하며, i번째 열의 모든 블록은 hi × 1 × 1 크기이고, 지면과 평행한 1 × 1 면을 가진다. 또한 구조물은 피라미드여야 한다. 피라미드는 꼭대기 열을 포함해야 하는데, 꼭대기 열 왼쪽의 각 열 j에 대해 열 j의 높이는 열 j + 1의 높이 이하이고, 꼭대기 열 오른쪽의 각 열 k에 대해 열 k의 높이는 열 k − 1의 높이 이하이다. 예를 들어, 그림 A.1의 왼쪽 구조물은 꼭대기 열이 없으므로 피라미드가 아니고, 오른쪽 구조물은 왼쪽에서 세 번째 열이 꼭대기 열이므로 피라미드이다(왼쪽에서 네 번째 열도 마찬가지이다).

그림 A.1: (왼쪽) 피라미드가 아닌 예. (오른쪽) 피라미드인 예. 두 경우 모두 n = 8이고, 왼쪽부터 오른쪽으로 각 열의 블록 크기는 6, 8, 4, 5, 6, 4, 2, 3이다. 이 수열은 샘플 입력 3에 나온다.

물론 피라미드를 만드는 것만으로는 쉽기 때문에, Aaron은 Andrew에게 사용할 블록 크기 수열이 주어졌을 때 부피가 가장 작은 피라미드를 찾으라고 했다. Andrew를 도와 가능한 가장 작은 부피를 구하라. 각 크기의 블록은 무한히 공급된다고 가정할 수 있다.

입력

입력의 첫 줄에는 수열의 길이를 나타내는 정수 n (1 ≤ n ≤ 200 000)이 주어진다.

둘째 줄에는 블록을 설명하는 n개의 정수 h1, h2, . . . , hn (1 ≤ hi ≤ 100 000)이 주어진다. 이는 i번째 열에 사용되는 블록이 hi × 1 × 1 크기여야 함을 나타낸다.

출력

피라미드의 가장 작은 부피를 출력한다.

예제3

  1. 예제 1

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

    입력
    3
    99 15 11
    
    예상 출력
    125
    
  3. 예제 3

    입력
    8
    6 8 4 5 6 4 2 3
    
    예상 출력
    49