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);
}