问题描述:
解题思路:
利用差分,当第一个以后的差分元素都为零时就代表楼梯高度等于第一个楼梯的高度。为什么是第一个呢,因为以第一个为标准的区间操作数最少。
注意点:每次都只能加一或减一,ans开ll
题解:
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 9;
int d[N], a[N];
int main()
{
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int n;cin >> n;
for(int i = 1; i <= n; i++){
cin >> a[i];
d[i] = a[i] - a[i - 1];
}
long long ans1 = 0, ans2 = 0; // 虽然题目没说每个元素大小,但像这种加总和的都可能超过int
for(int i = 2; i <= n; i++)
{
if(d[i] < 0)ans1 -= d[i];
if(d[i] > 0)ans2 += d[i];
}
cout << max(ans1, ans2) << '\n';
return 0;
}
知识点:差分