만드는 중입니다

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

수열

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

요약
1부터 n까지 각 값의 가중치가 주어질 때, 각 v를 포함하는 좋은 수열 가운데 가중치 합이 가장 작은 값을 구합니다.
난이도

어려움10점 중 8점

유형
동적 계획법, 최단 경로, 수학
정답자
아직 제출이 없습니다

문제

양의 정수로 이루어진 수열 (x1,…,xm)(x_1,\ldots,x_m)이 좋은 수열이라는 것은 x1=1x_1 = 1이고, 각 1<j≤m1 < j \leq m에 대해 xj=xj−1+1x_j = x_{j-1}+1이거나, 0<k≤l<j0 < k \leq l < j인 어떤 kk, ll에 대해 xj=xk⋅xlx_j = x_k \cdot x_l이 성립하는 것이다. 예를 들어 (1,1)(1,1)과 (1,2)(1,2)는 모두 좋은 수열이지만, (1,3)(1,3)은 좋은 수열이 아니다.

정수 nn개 w1,…,wnw_1,\ldots,w_n이 주어졌을 때, 각 1≤j≤m1 \leq j \leq m에 대해 1≤xj≤n1 \leq x_j \leq n을 만족하는 정수 수열 (x1,…,xm)(x_1,\ldots,x_m)의 가중치는 다음과 같다.

wx1+⋯+wxm.w_{x_1} + \cdots + w_{x_m}.

예를 들어 가중치가 w1=10w_1=10, w2=42w_2=42, w3=1w_3=1로 주어지면, (1,1)(1,1)의 가중치는 2020이고 (1,3)(1,3)의 가중치는 1111이다.

1≤v≤n1 \leq v \leq n에 대해, svs_v는 값 vv를 포함하는 좋은 수열의 가중치 중 최솟값이다.

입력

첫 줄에 가중치의 개수인 정수 nn이 주어진다. 이어지는 nn개의 줄에는 정수 가중치 w1,…,wnw_1, \ldots, w_n이 한 줄에 하나씩 주어진다.

출력

nn개의 줄을 출력한다. vv번째 줄에는 svs_v를 출력한다(v=1,…,nv = 1, \ldots, n).

제한

1≤n≤30 0001 \leq n \leq 30\,000이고, 각 1≤i≤n1 \leq i \leq n에 대해 1≤wi≤1061 \leq w_i \leq 10^6이다.

예제1

  1. 예제 1

    입력
    3
    10
    42
    1
    
    예상 출력
    10
    52
    53