如果两个相邻数差的绝对值>k,则需要分成<=k的小段,操作次数(d+k-1)/k-1;

特别注意,如果原数组的平滑值<k,则只需要操作一次,将平滑值提高到k。

#include <iostream>
#include<vector>
#include<algorithm>
using namespace std;
using ll=long long;
int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int n;
    ll k;
    cin>>n>>k;
    vector<ll>a(n);
    for(int i=0;i<n;i++){
        cin>>a[i];
    }
    ll ans=0,maxd=0;
    for(int i=1;i<n;i++){
        ll d=llabs(a[i]-a[i-1]);
        maxd=max(maxd,d);
        if(d>k)ans+=(d+k-1)/k-1;
    }
    if(maxd<k)cout<<1<<endl;
    else cout<<ans<<endl;
    return 0;
}