#include "bits/stdc++.h"
using namespace std;
#define int long long
#define ll long long
#define ld long double
#define endl '\n'
#define st first
#define nd second
#define mp make_pair
#define pb push_back
#define eb emplace_back
#define sz(x) (int)(x).size()
#define all(x) begin(x),end(x)
#define FOR(i,l,r) for(int i=(l);i<=(r);i++)
#define ROF(i,r,l) for(int i=(r);i>=(l);i--)
#define _$ auto operator<<(auto&o,auto x)->decltype
_$(x.st,o){return o<<"("<<x.st<<", "<<x.nd<<")";}
_$(end(x),o){o<<"{";for(int i=0;auto e:x)o<<","+!i++<<e;return o<<"}";}
#ifdef LOCAL
#define debug(x...) cerr<<"["#x"]: ",[](auto...$){\
((cerr<<$<<"; "),...)<<'\n';}(x)
#else
#define debug(...)
#endif
#define rep(i,a,b) for(int i=(a);i<(b); i++)
using pii=pair<int,int>;
using vi=vector<int>;
const int inf = 1e9+7;
signed main() {
cin.tie(0)->sync_with_stdio(0);
int n, k;
cin >> n >> k;
vi a(n);
rep(i,0,n) cin >> a[i];
set<pii> S;
rep(i,0,n){
S.emplace(a[i], i);
}
int ans = 0;
while (sz(S)) {
auto [x, i] = *prev(S.end());
S.erase(prev(S.end()));
for (int j : {i - 1, i + 1}) {
if (0 <= j && j < n && x - k > a[j]) {
S.erase({a[j], j});
ans += x - k - a[j];
a[j] = x - k;
S.emplace(a[j], j);
}
}
}
cout << ans << '\n';
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 63 64 65 66 67 | #include "bits/stdc++.h" using namespace std; #define int long long #define ll long long #define ld long double #define endl '\n' #define st first #define nd second #define mp make_pair #define pb push_back #define eb emplace_back #define sz(x) (int)(x).size() #define all(x) begin(x),end(x) #define FOR(i,l,r) for(int i=(l);i<=(r);i++) #define ROF(i,r,l) for(int i=(r);i>=(l);i--) #define _$ auto operator<<(auto&o,auto x)->decltype _$(x.st,o){return o<<"("<<x.st<<", "<<x.nd<<")";} _$(end(x),o){o<<"{";for(int i=0;auto e:x)o<<","+!i++<<e;return o<<"}";} #ifdef LOCAL #define debug(x...) cerr<<"["#x"]: ",[](auto...$){\ ((cerr<<$<<"; "),...)<<'\n';}(x) #else #define debug(...) #endif #define rep(i,a,b) for(int i=(a);i<(b); i++) using pii=pair<int,int>; using vi=vector<int>; const int inf = 1e9+7; signed main() { cin.tie(0)->sync_with_stdio(0); int n, k; cin >> n >> k; vi a(n); rep(i,0,n) cin >> a[i]; set<pii> S; rep(i,0,n){ S.emplace(a[i], i); } int ans = 0; while (sz(S)) { auto [x, i] = *prev(S.end()); S.erase(prev(S.end())); for (int j : {i - 1, i + 1}) { if (0 <= j && j < n && x - k > a[j]) { S.erase({a[j], j}); ans += x - k - a[j]; a[j] = x - k; S.emplace(a[j], j); } } } cout << ans << '\n'; return 0; } |
English