만드는 중입니다

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

점프

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

요약
건물 높이가 주어질 때, 사이의 건물이 모두 두 끝보다 낮은 건물 쌍끼리 점프하는 최소 비용(높이 차의 제곱 합)을 모든 쌍에 걸쳐 구하고 10억 7의 나머지를 출력합니다.
난이도

어려움10점 중 9점

유형
트리, 분할 정복, 동적 계획법
정답자
아직 제출이 없습니다

문제

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

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

  • aa번 건물과 bb번 건물 사이에 있는 모든 건물의 높이가 min⁡(Ha,Hb)\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)

둘째 줄에 건물의 높이 H1,H2,⋯ ,HNH_1, H_2, \cdots, H_N이 공백으로 구분되어 주어진다. 모든 건물의 높이는 정수이며, 서로 다르다. (1≤Hi≤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