#include <bits/stdc++.h>
using namespace std;
#define pii pair<int, int>
int main(){
cin.tie(0)->sync_with_stdio(0);
int n, k; cin>>n>>k;
vector<pii> values(n);
vector<int> ogvals(n);
for(int i = 0; i<n; i++){
cin>>values[i].first;
ogvals[i] = values[i].first;
values[i].second = i;
}
sort(values.begin(), values.end());
int out = 0;
for(auto [val, pos] : values){
int cpos = pos - 1;
while(cpos >= 0){
if(ogvals[cpos] >= ogvals[pos]) break;
int tmp = ogvals[cpos + 1] - k;
if(ogvals[cpos] < tmp){
out += tmp - ogvals[cpos];
ogvals[cpos] = max(ogvals[cpos], tmp);
}
cpos--;
}
cpos = pos + 1;
while(cpos < n){
if(ogvals[cpos] >= ogvals[pos]) break;
int tmp = ogvals[cpos - 1] - k;
if(ogvals[cpos] < tmp){
out += tmp - ogvals[cpos];
ogvals[cpos] = max(ogvals[cpos], tmp);
}
cpos++;
}
}
cout<<out<<endl;
}
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; #define pii pair<int, int> int main(){ cin.tie(0)->sync_with_stdio(0); int n, k; cin>>n>>k; vector<pii> values(n); vector<int> ogvals(n); for(int i = 0; i<n; i++){ cin>>values[i].first; ogvals[i] = values[i].first; values[i].second = i; } sort(values.begin(), values.end()); int out = 0; for(auto [val, pos] : values){ int cpos = pos - 1; while(cpos >= 0){ if(ogvals[cpos] >= ogvals[pos]) break; int tmp = ogvals[cpos + 1] - k; if(ogvals[cpos] < tmp){ out += tmp - ogvals[cpos]; ogvals[cpos] = max(ogvals[cpos], tmp); } cpos--; } cpos = pos + 1; while(cpos < n){ if(ogvals[cpos] >= ogvals[pos]) break; int tmp = ogvals[cpos - 1] - k; if(ogvals[cpos] < tmp){ out += tmp - ogvals[cpos]; ogvals[cpos] = max(ogvals[cpos], tmp); } cpos++; } } cout<<out<<endl; } |
English