思路:
看到题目,很明显知道是一个单峰问题。
我们首先发现将一个区间[l,r]高度都加上1,
[l,r]区间里的相对高度是不会变得。
那我们考虑在n个草中找一个最大值作为峰顶,在向两边构造上升和下降序列。根据刚刚的规律,我们将左半边的草加1,也可以延伸的右边草加一,因为相对高度是不变的。
所以,先差分,然后用前缀和存储单调上升的代价,后缀和存储单调下降的代价然后每个位置取最大值,然后再取最小值即可
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define ll long long
using namespace std;
ll n, ans = 1e18;
ll a[200005