만드는 중입니다

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

블록 쌓기

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

요약
N개 칸의 목표 블록 수 a_i가 주어질 때, 구간 쌓기 연산의 최소 횟수와 그 횟수에서 구간 길이 제곱합의 최소 비용을 구합니다.
난이도

보통10점 중 7점

유형
그리디, 힙, 배열
정답자
아직 제출이 없습니다

문제

NN개의 칸이 일렬로 나열되어 있고, 이 위에 블록을 쌓으려고 한다. 처음에는 어느 칸에도 블록이 없다. 한 번의 시행으로 다음과 같이 블록을 쌓을 수 있다.

  • 1≤l≤r≤N1 \leq l \leq r \leq N을 만족하는 두 정수 ll, rr을 고른다. l≤i≤rl \leq i \leq r인 모든 ii에 대해 ii번째 칸에 블록을 한 개씩 쌓는다. 이때 (r−l+1)2(r-l+1)^2만큼의 비용이 든다.

목표는 1≤i≤N1 \leq i \leq N인 모든 ii에 대해 ii번째 칸의 블록 개수가 정확히 aia_i개가 되도록 하는 것이다. 필요한 시행의 최소 횟수와, 시행 횟수를 최소로 할 때의 비용 최솟값을 구하라.

입력

첫 번째 줄에 칸의 개수 NN이 주어진다. (1≤N≤300 000)(1 \leq N \leq 300\ 000)

두 번째 줄에 a1,a2,⋯ ,aNa_1, a_2, \cdots, a_N이 공백으로 구분되어 주어진다. (0≤ai≤1 000 000)(0 \leq a_i \leq 1\ 000\ 000)

출력

시행의 최소 횟수와, 시행 횟수를 최소로 할 때의 비용 최솟값을 공백으로 구분하여 출력한다.

예제1

  1. 예제 1

    입력
    4
    3 2 3 2
    
    예상 출력
    4 30