#include using namespace std; const int INF = 1 << 30; int main() { int N; vector< int > vs; cin >> N; for(int i = -1000000; i <= 0; i++) { vs.push_back(i); } for(int i = 0; i < N; i++) { int x; cin >> x; x -= i; vs.push_back(x); } vector< int > lis(vs.size(), INF); for(int i = 0; i < vs.size(); i++) { *upper_bound(begin(lis), end(lis), vs[i]) = vs[i]; } int sz = lower_bound(begin(lis), end(lis), INF) - begin(lis); cout << vs.size() - sz << endl; }