#include<iostream>
#include<vector>
#include<algorithm>
void set(int& pile, int value, int& result)
{
result += value - pile;
pile = value;
}
void fix(int pos, std::vector<int>& tab, int k, int& result) {
if (pos == 0 || tab[pos - 1] >= tab[pos] - k) {
return;
}
set(tab[pos - 1], tab[pos] - k, result);
fix(pos - 1, tab, k, result);
}
int main() {
std::ios::sync_with_stdio(0);
std::cin.tie(0);
int n, k;
std::cin >> n >> k;
std::vector<int> tab(n);
for (int i = 0; i < n; ++i) {
std::cin >> tab[i];
}
int result = 0;
for (int phase = 0; phase < 2; ++phase) {
for (int i = 0; i < n; ++i) {
fix(i, tab, k, result);
}
std::reverse(tab.begin(), tab.end());
}
std::cout << result << '\n';
}
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 | #include<iostream> #include<vector> #include<algorithm> void set(int& pile, int value, int& result) { result += value - pile; pile = value; } void fix(int pos, std::vector<int>& tab, int k, int& result) { if (pos == 0 || tab[pos - 1] >= tab[pos] - k) { return; } set(tab[pos - 1], tab[pos] - k, result); fix(pos - 1, tab, k, result); } int main() { std::ios::sync_with_stdio(0); std::cin.tie(0); int n, k; std::cin >> n >> k; std::vector<int> tab(n); for (int i = 0; i < n; ++i) { std::cin >> tab[i]; } int result = 0; for (int phase = 0; phase < 2; ++phase) { for (int i = 0; i < n; ++i) { fix(i, tab, k, result); } std::reverse(tab.begin(), tab.end()); } std::cout << result << '\n'; } |
English