def main(): import sys input = sys.stdin.read().split() idx = 0 N = int(input[idx]) idx +=1 A = list(map(int, input[idx:idx+N])) idx += N # Left to right: compute best interval ending at i left_cost = [0]*N left_len = [0]*N left_sum = [0]*N for i in range(N): if i == 0: left_cost[i] = 1 + A[i] left_len[i] = 1 left_sum[i] = A[i] else: # cost of extending previous interval prev_len = left_len[i-1] prev_sum = left_sum[i-1] prev_cost = left_cost[i-1] new_len = prev_len + 1 new_sum = prev_sum + A[i] delta = 2*prev_len +1 + A[i] new_cost = prev_cost + delta cost_new = 1 + A[i] if new_cost < cost_new: left_cost[i] = new_cost left_len[i] = new_len left_sum[i] = new_sum else: left_cost[i] = cost_new left_len[i] = 1 left_sum[i] = A[i] # Right to left: compute best interval starting at i right_cost = [0]*N right_len = [0]*N right_sum = [0]*N for i in range(N-1, -1, -1): if i == N-1: right_cost[i] = 1 + A[i] right_len[i] = 1 right_sum[i] = A[i] else: # extend next interval next_len = right_len[i+1] next_sum = right_sum[i+1] next_cost = right_cost[i+1] new_len = next_len + 1 new_sum = next_sum + A[i] delta = 2*next_len +1 + A[i] new_cost = next_cost + delta cost_new = 1 + A[i] if new_cost < cost_new: right_cost[i] = new_cost right_len[i] = new_len right_sum[i] = new_sum else: right_cost[i] = cost_new right_len[i] = 1 right_sum[i] = A[i] # Now compute the merged cost for each i and compare with left and right ans = [0]*N for i in range(N): candidates = [left_cost[i], right_cost[i]] l_len = left_len[i] r_len = right_len[i] l_sum = left_sum[i] r_sum = right_sum[i] merged_len = l_len + r_len -1 merged_sum = l_sum + r_sum - A[i] merged_cost = merged_len * merged_len + merged_sum candidates.append(merged_cost) ans[i] = min(candidates) for a in ans: print(a) if __name__ == '__main__': main()