# O(n log n) の想定解 def solve(): n = int(input()) A = list(map(int, input().split())) inf = 10 ** 9 + 7 dp = [inf] * (n + 1) dp[0] = 0 inc = 0 for i, a in enumerate(A): # インクリメントする前の配列で、j+1 を二分探索する lo = -1 hi = i + 1 while hi - lo > 1: mid = (hi + lo) // 2 if dp[mid] + inc < a: lo = mid else: hi = mid # インクリメント回数 inc += 1 # 実際の置き換え if lo >= 0: dp[lo + 1] = a - inc for j in range(n, -1, -1): if dp[j] < inf: return n - j assert False if __name__ == '__main__': print(solve())