题面
题意:给你一个序列,每次可以花费一个代价使一个数+1或者-1,求使其严格上升的最小代价.
题解:
首先考虑使其不下降的情况.
逐位考虑答案,假设前
i
i
个已经不下降,而,显然我们此时至少需要花费
ai−ai+1
a
i
−
a
i
+
1
的代价使其不下降,那么新的
ai和ai+1也就是a′i和a′i+1
a
i
和
a
i
+
1
也
就
是
a
i
′
和
a
i
+
1
′
就可以在
[ai+1,ai](a′i+1=a′i)
[
a
i
+
1
,
a
i
]
(
a
i
+
1
′
=
a
i
′
)
上任意取值,那我们就取其最小值
ai+1
a
i
+
1
(比它大的值也一定能取到,所以原序列还是不下降的),所以可以用一个堆维护上述过程.
考虑其严格上升的情况,读入时只要每个
ai+1
a
i
+
1
比
ai
a
i
多减去1即可
Code