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 <bits/stdc++.h>
using namespace std;

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(nullptr);
	int sciezki, maxi; long long ile_ciezarowek = 0, przechodni = 0;
	cin >> sciezki >> maxi;
	vector<int>fragmenty(sciezki);
	cin >> fragmenty[0];
	for (int i = 1; i < sciezki; i++){
		cin >> fragmenty[i];
		przechodni = 0;
		if ((fragmenty[i-1] - fragmenty[i]) > maxi){
			przechodni += fragmenty[i-1] - maxi;
			przechodni -= fragmenty[i];
			fragmenty[i]+=przechodni;
			ile_ciezarowek += przechodni;
			//cout << "---" << endl << przechodni << endl;
		}else if (abs(fragmenty[i-1] - fragmenty[i]) > maxi){
			przechodni += fragmenty[i] - maxi;
			przechodni -= fragmenty[i-1];
			fragmenty[i-1]+=przechodni;
			ile_ciezarowek += przechodni;
			//cout << "<--" << endl << przechodni << endl;
			if (i >= 2){
				przechodni = 0;
				//cout << "<----------";
				for (int j = i-2; j >= 0; j--){
					przechodni = fragmenty[j+1]-maxi;
					przechodni -= fragmenty[j];
					if (przechodni <= 0){
						break;
					}
					fragmenty[j] += przechodni;
					ile_ciezarowek += przechodni;
					//cout << przechodni << ' ';
				}
			}
		}
	}
	cout << ile_ciezarowek;
	return 0;
}