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
45
46
47
#include <bits/stdc++.h>
using namespace std;
int main(){
	int n,k;
	cin>>n>>k;
	vector<long long>a(n);
	long long ile=0;
	priority_queue<pair<long long,int>>pq;
	for(int i=0;i<n;i++){
	cin>>a[i];
	pq.push({a[i],i});
	}
	vector<bool>odw(n);
	while(!pq.empty()){
	auto w=pq.top();
	pq.pop();
	if(odw[w.second]==true)
	continue;
	odw[w.second]=true;
	if(w.second==0){{
		if(a[w.second+1]+k<w.first)
		ile+=w.first-a[w.second+1]-k;
		a[w.second+1]=w.first-k;
		pq.push({a[w.second+1],w.second+1});}
		continue;
	}
	if(w.second==n-1){
		if(a[w.second-1]+k<w.first){
		ile+=w.first-a[w.second-1]-k;
		a[w.second-1]=w.first-k;
		pq.push({a[w.second-1],w.second-1});
	}
		continue;
}
	if(a[w.second+1]+k<w.first){
		ile+=w.first-a[w.second+1]-k;
		a[w.second+1]=w.first-k;
		pq.push({a[w.second+1],w.second+1});}
		if(a[w.second-1]+k<w.first){
		ile+=w.first-a[w.second-1]-k;
		a[w.second-1]=w.first-k;
		pq.push({a[w.second-1],w.second-1});
}
}
cout<<ile;

}