#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define mp make_pair #define pb push_back #define all(x) (x).begin(),(x).end() #define rep(i,n) for(int i=0;i<(n);i++) using namespace std; typedef long long ll; typedef unsigned long long ull; typedef vector vb; typedef vector vi; typedef vector vvb; typedef vector vvi; typedef pair pii; const int INF=1<<30; const double EPS=1e-9; const int dx[]={1,0,-1,0,1,1,-1,-1},dy[]={0,-1,0,1,1,-1,-1,1}; int LIS(vector &A) { int N = A.size(); vector dp; for (int i = 0; i < N; i++) { int k = lower_bound(dp.begin(), dp.end(), A[i]) - dp.begin(); if (dp.size() == k) { dp.push_back(A[i]); } else { dp[k] = A[i]; } } return dp.size(); } int main() { int N; cin >> N; vector A(N); for (int i = 0; i < N; i++) { cin >> A[i]; } vector B; for (int i = 0; i < N - 1; i++) { if (A[i] - i < 0) continue; B.push_back(A[i] - i); } cout << N - LIS(B) << endl; return 0; }