#include<bits/stdc++.h>
using namespace std;
vector<int> A;
vector<int> MIN;
vector<pair<int, int>> T;
int main(){
ios_base::sync_with_stdio(0); cin.tie(0);
int N, K; cin >> N >> K;
for(int i = 0; i < N; ++i){
int Ax; cin >> Ax;
T.push_back({Ax, i});
A.push_back(Ax);
MIN.push_back(Ax);
}
sort(T.begin(), T.end());
for(auto A : T){
for(int i = 1; i+A.second < N; ++i){
MIN[A.second+i]=max(MIN[A.second+i], A.first-i*K);
}
for(int i = 1; A.second-i >= 0 ; ++i){
MIN[A.second-i]=max(MIN[A.second-i], A.first-i*K);
}
}
int ANS = 0;
for(int i = 0; i < N; ++i){
ANS+=MIN[i]-A[i];
}
cout << ANS;
}
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 | #include<bits/stdc++.h> using namespace std; vector<int> A; vector<int> MIN; vector<pair<int, int>> T; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); int N, K; cin >> N >> K; for(int i = 0; i < N; ++i){ int Ax; cin >> Ax; T.push_back({Ax, i}); A.push_back(Ax); MIN.push_back(Ax); } sort(T.begin(), T.end()); for(auto A : T){ for(int i = 1; i+A.second < N; ++i){ MIN[A.second+i]=max(MIN[A.second+i], A.first-i*K); } for(int i = 1; A.second-i >= 0 ; ++i){ MIN[A.second-i]=max(MIN[A.second-i], A.first-i*K); } } int ANS = 0; for(int i = 0; i < N; ++i){ ANS+=MIN[i]-A[i]; } cout << ANS; } |
English