#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
typedef long long ll;
using namespace __gnu_pbds;
using namespace std;
template <typename T>
using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int n, k;
cin >> n >> k;
vector<ll> a(n);
for(int i=0; i<n; ++i) cin >> a[i];
auto start = a;
auto wyrownaj = [&](int i) {
if(a[i-1] >= a[i]) {
a[i] = max(a[i], a[i-1]-k);
} else {
a[i-1] = max(a[i-1], a[i]-k);
}
};
for(int i=1; i<n; ++i) {
for(int j=i; j>0; --j) wyrownaj(j);
}
ll res = 0;
for(int i=0; i<n; ++i) res += a[i] - start[i];
cout << res << "\n";
return 0;
}
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 | #include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> typedef long long ll; using namespace __gnu_pbds; using namespace std; template <typename T> using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, k; cin >> n >> k; vector<ll> a(n); for(int i=0; i<n; ++i) cin >> a[i]; auto start = a; auto wyrownaj = [&](int i) { if(a[i-1] >= a[i]) { a[i] = max(a[i], a[i-1]-k); } else { a[i-1] = max(a[i-1], a[i]-k); } }; for(int i=1; i<n; ++i) { for(int j=i; j>0; --j) wyrownaj(j); } ll res = 0; for(int i=0; i<n; ++i) res += a[i] - start[i]; cout << res << "\n"; return 0; } |
English