直感を信じて投げてみたら通った。

B - 積み鉛筆

解説

$k_i, k_{i+1}$から$l_{i+1}$を決めたい。 条件より$k_i = {\rm max} \{ l_i, l_{i+1} \}$であるが、$k_i \lt l_{i+1}$であればこれに矛盾する。 同様に$k_{i+1} = {\rm max} \{ l_{i+1}, l_{i+2} \}$であるが、$k_{i+1} \lt l_{i+1}$であれば矛盾。 つまり$l_{i+1} \le {\rm min} \{ k_i, k_{i+1} \}$である。

ここから$l_{i+1} = {\rm min} \{ k_i, k_{i+1} \}$としてよいことは明らかであり、これが答え。両端は適当に。

実装

#!/usr/bin/env python3
n = int(input())
k = list(map(int,input().split()))
l = []
l.append(k[0])
for i in range(len(k)-1):
    l.append(min(k[i], k[i+1]))
l.append(k[-1])
print(*l)