#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define REP(i,s,n) for(int i=(int)(s);i<(int)(n);i++) using namespace std; typedef long long int ll; typedef vector VI; typedef vector VL; typedef pair PI; int main(void) { int n; cin >> n; VL a(n); REP(i, 0, n) { cin >> a[i]; a[i] -= i + 1; } // Coord compression map tbl; vector inv_tbl; { set vals; vals.insert(0); REP(i, 0, n) { if (a[i] >= 0) { vals.insert(a[i]); } } inv_tbl = vector(vals.begin(), vals.end()); sort(inv_tbl.begin(), inv_tbl.end()); REP(i, 0, inv_tbl.size()) { tbl[inv_tbl[i]] = i; } } VL dp(200010); int m = tbl.size(); REP(i, 0, n) { if (tbl.count(a[i])) { int idx = tbl[a[i]]; REP(j, idx, m) { dp[j] = max(dp[j], j >= 1 ? dp[j - 1] : 0) + (j == idx ? 1 : 0); } } } cout << n - dp[m - 1] << endl; }