n = int(input()) A = list(map(int, input().split())) # Compute L: L[i] is the maximum time when reaching i-th cell (1-based) from left L = [0] * (n + 1) for i in range(1, n + 1): L[i] = max(L[i-1] + 1, A[i-1]) # Compute R: R[i] is the maximum time when reaching i-th cell (1-based) from right R = [0] * (n + 2) for i in range(n, 0, -1): R[i] = max(R[i+1] + 1, A[i-1]) min_time = float('inf') for i in range(1, n + 1): left = L[i-1] right = R[i+1] current = max(left, right) + 1 current = max(current, A[i-1]) if current < min_time: min_time = current print(min_time)