블록 쌓기

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

요약
구간에 블록을 하나씩 쌓는 시행으로 최종 개수를 a₁부터 a_N까지 만들 때, 시행 횟수의 최솟값과 그때의 최소 비용을 구한다.
난이도

어려움10점 중 8점

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

문제

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번째 칸에 있는 블록의 개수가 a_ia\_i개가 되도록 하는 것이다. 이 때 필요한 시행의 최소 횟수와 시행을 최소로 할 때 비용의 최솟값을 구하여라.

입력

첫 번째 줄에 칸의 개수를 나타내는 정수인 NN이 주어진다. (1≤N≤300 000)(1\leq N \leq 300\ 000)

두 번째 줄에 a_1,a_2,⋯ ,a_Na\_1, a\_2, \cdots ,a\_N이 공백으로 구분되어 주어진다. (0≤a_i≤1 000 000)(0\leq a\_i \leq 1\ 000\ 000)

출력

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

예제1

  1. 예제 1

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