#include #include #include using namespace std; bool is_peak(int i, const vector& A) { int N = A.size(); return 0 < i && i < N - 1 && A[i - 1] < A[i] && A[i] > A[i + 1]; } int count_operations(int N, vector& A) { set peaks; for (int i = 1; i < N - 1; ++i) { if (is_peak(i, A)) { peaks.insert(i); } } int count = 0; while (!peaks.empty()) { vector to_check(peaks.begin(), peaks.end()); for (int i : to_check) { if (peaks.count(i)) { peaks.erase(i); count += 1; A[i] = min(A[i - 1], A[i + 1]) - 1; for (int j : {i - 1, i + 1}) { if (is_peak(j, A)) { peaks.insert(j); } } } } } return count; } int main() { int N; cin >> N; vector A(N); for (int i = 0; i < N; ++i) { cin >> A[i]; } int result = count_operations(N, A); cout << result << endl; return 0; }