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
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);

	int n;
	long long k;
	cin >> n >> k;

	vector<long long> a(n);
	for (int i = 0; i < n; ++i) {
		cin >> a[i];
	}

	vector<long long> left_need(n), right_need(n);

	left_need[0] = a[0];
	for (int i = 1; i < n; ++i) {
		left_need[i] = max(a[i], left_need[i - 1] - k);
	}

	right_need[n - 1] = a[n - 1];
	for (int i = n - 2; i >= 0; --i) {
		right_need[i] = max(a[i], right_need[i + 1] - k);
	}

	long long answer = 0;
	for (int i = 0; i < n; ++i) {
		long long target = max(left_need[i], right_need[i]);
		answer += target - a[i];
	}

	cout << answer << '\n';
	return 0;
}