점프

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

요약
모든 건물 쌍에 대해, 사이의 건물 높이가 양 끝 높이의 최솟값보다 낮은 경우에만 점프할 수 있을 때 두 옥상 사이 이동 비용의 최솟값을 구해 합을 계산한다.
난이도

어려움10점 중 8점

유형
그래프, 최단 경로, 스택, 그리디
정답자
아직 제출이 없습니다

문제

좌우로 길게 뻗은 도로를 따라 NN채의 건물이 세워져 있다. 건물은 세워진 순서를 따라 왼쪽에서부터 11부터 NN까지의 번호가 붙어 있고, ii번 건물의 높이는 H_iH\_i이다.

뛰어난 신체 능력을 갖춘 채완이는 아래 조건을 만족하는 서로 다른 두 건물의 옥상 사이를 점프해서 이동할 수 있다.

  • aa번 건물과 bb번 건물 사이에 있는 모든 건물의 높이가 min⁡(H_a,H_b)\min(H\_a, H\_b)보다 작다.

이때, 한 번 점프하면 두 건물 높이 차이의 제곱만큼 체력을 소모한다. 두 건물이 좌우로 얼마나 떨어져 있는지는 체력 소모량에 영향을 미치지 않는다.

D(a,b)D(a, b)를 채완이가 aa번 건물의 옥상에서 bb번 건물의 옥상으로 점프만으로 이동하는 데 필요한 체력 소모량의 최솟값이라 했을 때, ∑_i=1N−1∑_j=i+1ND(i,j)\sum\_{i=1}^{N-1} \sum\_{j=i+1}^{N}{D(i, j)}를 구해보자.

입력

첫째 줄에 건물의 개수 NN이 주어진다. (2≤N≤500 000)(2 \le N \le 500\ 000)

둘째 줄에 건물의 높이 H_1,H_2,⋯ ,H_NH\_1, H\_2, \cdots, H\_N이 공백으로 구분되어 주어진다. 모든 건물의 높이는 정수이며, 서로 다르다. (1≤H_i≤109)(1 \le H\_i \le 10^9)

출력

∑_i=1N−1∑_j=i+1ND(i,j)\sum\_{i=1}^{N-1} \sum\_{j=i+1}^{N}{D(i, j)}를 1 000 000 0071\ 000\ 000\ 007로 나눈 나머지를 출력한다.

예제1

  1. 예제 1

    입력
    5
    3 10 4 7 6
    
    예상 출력
    290