#include <bits/stdc++.h>
#define ll long long
using namespace std;
void solve(ll l, ll r, vector<ll>& v, vector<bool>& taken, ll &ans, ll k){
if(l == r) return;
ll maxi = -1, idx = 0;
for(ll i=l; i<r; i++){
if(taken[i]) continue;
if(v[i] > maxi){
maxi = v[i];
idx = i;
}
}
taken[idx] = 1;
if(idx != 0 && idx-1 >= l && !taken[idx-1]){
ll r = maxi - v[idx-1];
if(r > k){
r -= k;
v[idx-1] += r;
ans += r;
}
}
if(idx != (ll)(v.size())-1LL && idx+1 < r && !taken[idx+1]){
ll r = maxi - v[idx+1];
if(r > k){
r -= k;
v[idx+1] += r;
ans += r;
}
}
solve(l, idx, v, taken, ans, k);
solve(idx+1, r, v, taken, ans, k);
}
void solve(){
ll n, k; cin>>n>>k;
vector<ll> v(n, 0); for(auto &e: v) cin>>e;
vector<bool> taken(n, 0);
ll ans = 0;
solve(0, n, v, taken, ans, k);
cout<<ans<<'\n';
}
int main(){
ios_base::sync_with_stdio(0);
cout.tie(0); cin.tie(0);
int sets=1;
//cin>>sets;
while(sets--){
solve();
}
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | #include <bits/stdc++.h> #define ll long long using namespace std; void solve(ll l, ll r, vector<ll>& v, vector<bool>& taken, ll &ans, ll k){ if(l == r) return; ll maxi = -1, idx = 0; for(ll i=l; i<r; i++){ if(taken[i]) continue; if(v[i] > maxi){ maxi = v[i]; idx = i; } } taken[idx] = 1; if(idx != 0 && idx-1 >= l && !taken[idx-1]){ ll r = maxi - v[idx-1]; if(r > k){ r -= k; v[idx-1] += r; ans += r; } } if(idx != (ll)(v.size())-1LL && idx+1 < r && !taken[idx+1]){ ll r = maxi - v[idx+1]; if(r > k){ r -= k; v[idx+1] += r; ans += r; } } solve(l, idx, v, taken, ans, k); solve(idx+1, r, v, taken, ans, k); } void solve(){ ll n, k; cin>>n>>k; vector<ll> v(n, 0); for(auto &e: v) cin>>e; vector<bool> taken(n, 0); ll ans = 0; solve(0, n, v, taken, ans, k); cout<<ans<<'\n'; } int main(){ ios_base::sync_with_stdio(0); cout.tie(0); cin.tie(0); int sets=1; //cin>>sets; while(sets--){ solve(); } return 0; } |
English