만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

두 건물

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

요약
건물 n개의 높이가 주어질 때 i < j인 모든 쌍에 대해 (h_i + h_j) × (j - i)의 최댓값을 구합니다. n은 최대 1,000,000입니다.
난이도

보통10점 중 5점

유형
투 포인터, 그리디
정답자
아직 제출이 없습니다

문제

길을 따라 nn개의 건물이 일렬로 서 있다. 건물은 서로 이웃해 있고, 왼쪽에서 ii번째 건물의 폭은 1, 높이는 hih_i이다. nn개의 건물 중에서 i<ji < j인 두 건물, 즉 ii번째 건물과 jj번째 건물을 골라 (hi+hj)×(j−i)(h_i + h_j) \times (j - i)가 최대가 되도록 한다.

예를 들어 왼쪽부터 높이가 1, 3, 2, 5, 4인 건물 5개를 생각해 보자. 왼쪽에서 두 건물을 고르면 (1+3)×(2−1)=4(1 + 3) \times (2 - 1) = 4이다. 첫 번째 건물과 다섯 번째 건물을 고르면 (1+4)×(5−1)=20(1 + 4) \times (5 - 1) = 20이다. 최댓값은 높이가 3인 두 번째 건물과 높이가 4인 다섯 번째 건물에서 나오며, (3+4)×(5−2)=21(3 + 4) \times (5 - 2) = 21이다.

건물 높이의 열이 주어졌을 때 max⁡1≤i<j≤n(hi+hj)×(j−i)\max_{1 \le i < j \le n} (h_i + h_j) \times (j - i)를 출력하는 프로그램을 작성하라.

입력

첫 줄에 건물의 수 nn (2≤n≤10000002 \le n \le 1000000)이 주어진다. 둘째 줄에는 왼쪽부터 nn개 건물의 높이가 공백으로 구분되어 주어진다. ii번째 수가 ii번째 건물의 높이 hih_i이다 (1≤hi≤10000001 \le h_i \le 1000000).

출력

max⁡1≤i<j≤n(hi+hj)×(j−i)\max_{1 \le i < j \le n} (h_i + h_j) \times (j - i)의 값을 한 줄에 출력한다.

예제2

  1. 예제 1

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

    입력
    5
    8 3 6 3 1
    
    예상 출력
    36