山丘建房 - 代码源竞赛平台

题目描述

蜗蜗住在一座不断施工的城市。从窗边看出去,有 nn 座从左到右排列的山丘,第 ii 座的高度为 aia_i。城市计划在山丘上建房:只有一座山丘严格高于它存在的每一座相邻山丘时,才能在上面建房。最左和最右的山丘分别只有一个相邻山丘。

施工队有一台挖掘机,每工作一小时,可以选择一座山丘并把高度降低 11;同一时间只能处理一座山丘。山丘可以降到 00 或负数,但不能增高。

对于每个 k=1,2,…,⌈n/2⌉k=1,2,\ldots,\lceil n/2\rceil,求使至少 kk 座山丘能够建房的最少施工小时数。

输入格式

第一行包含一个整数 nn,表示山丘数量。

第二行包含 nn 个整数 a1,a2,…,ana_1,a_2,\ldots,a_n,依次表示每座山丘的初始高度。

输出格式

输出一行 ⌈n/2⌉\lceil n/2\rceil 个整数,以空格分隔。第 kk 个数表示使至少 kk 座山丘能够建房的最少小时数。

样例

3
1 1 1
1 1
5
5 1 4 1 5
0 0 0

样例解释

样例 1 中,把中间山丘从高度 11 降为 00,耗时 11 小时。此时两侧山丘都比相邻山丘高,因此建 11 栋或 22 栋房子的最少时间都是 11 小时。

样例 2 中,第 11、第 33、第 55 座山丘原本就严格高于各自的相邻山丘,不必施工。

数据范围

对于 100% 的数据,保证 1≤n≤50001\le n\le 5000,1≤ai≤1051\le a_i\le 10^5。