#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int main() {
int n, k;
scanf("%d%d", &n, &k);
vector<int> v(n);
priority_queue<pair<int, int>> pq;
for (int i = 0; i < n; ++i) {
scanf("%d", &v[i]);
pq.push({v[i], i});
}
int result = 0;
while (!pq.empty()) {
int val = pq.top().first;
int i = pq.top().second;
pq.pop();
if (val != v[i]) continue;
if (i > 0) {
int diff = v[i] - v[i - 1];
if (diff > k) {
result += diff - k;
v[i - 1] += diff - k;
pq.push({v[i - 1], i - 1});
}
}
if (i < n - 1) {
int diff = v[i] - v[i + 1];
if (diff > k) {
result += diff - k;
v[i + 1] += diff - k;
pq.push({v[i + 1], i + 1});
}
}
}
printf("%d\n", result);
}
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 | #include <iostream> #include <vector> #include <queue> using namespace std; int main() { int n, k; scanf("%d%d", &n, &k); vector<int> v(n); priority_queue<pair<int, int>> pq; for (int i = 0; i < n; ++i) { scanf("%d", &v[i]); pq.push({v[i], i}); } int result = 0; while (!pq.empty()) { int val = pq.top().first; int i = pq.top().second; pq.pop(); if (val != v[i]) continue; if (i > 0) { int diff = v[i] - v[i - 1]; if (diff > k) { result += diff - k; v[i - 1] += diff - k; pq.push({v[i - 1], i - 1}); } } if (i < n - 1) { int diff = v[i] - v[i + 1]; if (diff > k) { result += diff - k; v[i + 1] += diff - k; pq.push({v[i + 1], i + 1}); } } } printf("%d\n", result); } |
English