#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
#define int long long
int32_t main() {
int n, k;
std::cin >> n >> k;
std::vector<int> vec(n);
std::vector<bool> done(n, false);
std::priority_queue<std::pair<int,int>> sorted;
int out = 0;
for (int i = 0; i < n; ++i) {
std::cin >> vec[i];
sorted.push({vec[i], i});
}
while (!sorted.empty()) {
auto [v, i] = sorted.top();
sorted.pop();
if (!done[i]){
done[i] = true;
int max = vec[i];
if (i > 0)
max = std::max(max, vec[i - 1] - k);
if (i < n - 1)
max = std::max(max, vec[i + 1] - k);
out += max - vec[i];
vec[i] = max;
if (i > 0)
sorted.push({max - k, i - 1});
if (i < n - 1)
sorted.push({max - k, i + 1});
}
}
std::cout << out << '\n';
}
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 | #include <iostream> #include <vector> #include <algorithm> #include <queue> #define int long long int32_t main() { int n, k; std::cin >> n >> k; std::vector<int> vec(n); std::vector<bool> done(n, false); std::priority_queue<std::pair<int,int>> sorted; int out = 0; for (int i = 0; i < n; ++i) { std::cin >> vec[i]; sorted.push({vec[i], i}); } while (!sorted.empty()) { auto [v, i] = sorted.top(); sorted.pop(); if (!done[i]){ done[i] = true; int max = vec[i]; if (i > 0) max = std::max(max, vec[i - 1] - k); if (i < n - 1) max = std::max(max, vec[i + 1] - k); out += max - vec[i]; vec[i] = max; if (i > 0) sorted.push({max - k, i - 1}); if (i < n - 1) sorted.push({max - k, i + 1}); } } std::cout << out << '\n'; } |
English