// O(n^2) のTLE解を枝刈りしたやつ。まあまあ早い #include using namespace std; int solve() { int n; cin >> n; vector A(n); for (int i = 0; i < n; i++) cin >> A[i]; const int inf = 1e9; priority_queue, vector>, greater>> q1, q2; auto &cur = q1; auto &nex = q2; cur.emplace(0, 0); for (int i = 0; i < n; i++) { int las = inf; int pre = inf; while (!cur.empty()) { int c, l; tie(c, l) = cur.top(); cur.pop(); if (l > pre) continue; pre = l; if (l < A[i]) { if (A[i] < las) { nex.emplace(c, A[i]); las = A[i]; } } if (l + 1 < las) { nex.emplace(c + 1, l + 1); las = l + 1; } } swap(cur, nex); } int ans = cur.top().first; return ans; } int main() { cin.tie(nullptr); ios::sync_with_stdio(false); cout << solve() << endl; return 0; }