#include<bits/stdc++.h>
using namespace std;
#define int int64_t
const int64_t mod = 1e9+7;
const int maxn = 1e3+10;
int inf;
/*
*/
int a[maxn];
int n, k;
priority_queue<pair<int, int>> pq;
int solve_by_pq()
{
a[0] = 0;
a[n+1] = 0;
for (int i = 1; i <= n; i++)
{
pq.push({a[i], i});
}
int ans = 0;
while (!pq.empty())
{
int cn = pq.top().second;
pq.pop();
if (cn < 1 || cn > n)
{
continue;
}
int to_add = max((int)0, max(a[cn-1] - k - a[cn], a[cn+1] - k - a[cn]));
if (to_add == 0)
{
continue;
}
a[cn] += to_add;
ans += to_add;
pq.push({a[cn-1], cn-1});
pq.push({a[cn+1], cn+1});
}
return ans;
}
void tc()
{
cin >> n >> k;
for (int i = 1; i <= n; i++)
{
cin >> a[i];
}
int ans = solve_by_pq();
cout << ans << endl;
}
int32_t main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
inf = numeric_limits<int>::max()/2;
int T = 1;
//cin >> T;
while (T--) tc();
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 68 69 70 71 72 73 74 75 76 77 | #include<bits/stdc++.h> using namespace std; #define int int64_t const int64_t mod = 1e9+7; const int maxn = 1e3+10; int inf; /* */ int a[maxn]; int n, k; priority_queue<pair<int, int>> pq; int solve_by_pq() { a[0] = 0; a[n+1] = 0; for (int i = 1; i <= n; i++) { pq.push({a[i], i}); } int ans = 0; while (!pq.empty()) { int cn = pq.top().second; pq.pop(); if (cn < 1 || cn > n) { continue; } int to_add = max((int)0, max(a[cn-1] - k - a[cn], a[cn+1] - k - a[cn])); if (to_add == 0) { continue; } a[cn] += to_add; ans += to_add; pq.push({a[cn-1], cn-1}); pq.push({a[cn+1], cn+1}); } return ans; } void tc() { cin >> n >> k; for (int i = 1; i <= n; i++) { cin >> a[i]; } int ans = solve_by_pq(); cout << ans << endl; } int32_t main() { ios_base::sync_with_stdio(false); cin.tie(0); inf = numeric_limits<int>::max()/2; int T = 1; //cin >> T; while (T--) tc(); return 0; } |
English