#define _USE_MATH_DEFINES #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define rep(i, N) for (int i = 0; i < N; i++) #define pb push_back typedef long long ll; typedef unsigned long long ull; typedef pair i_i; typedef pair ll_i; typedef pair i_ll; typedef pair d_i; typedef pair ll_ll; typedef pair d_d; struct edge { int v; ll w; }; const int MOD = 1000000007; const int _MOD = 1000000009; double EPS = 1e-10; const int INF = INT_MAX / 2; int main() { int N; cin >> N; vector a(N); rep(i, N) cin >> a[i]; vector > dpl(N + 1, vector(N + 1, INF)), dpr = dpl; dpl[0][N] = dpr[0][N] = -1; for (int d = N; d >= 1; d--) for (int l = 0; l + d <= N; l++) { int r = l + d; dpl[l + 1][r] = min(dpl[l + 1][r], max(a[l], dpl[l][r] + 1)); dpr[l][r - 1] = min(dpr[l][r - 1], max(a[r - 1], dpr[l][r] + 1)); dpr[l][r - 1] = min(dpr[l][r - 1], max(a[r - 1], dpl[l][r] + r - l)); dpl[l + 1][r] = min(dpl[l + 1][r], max(a[l], dpr[l][r] + r - l)); } int ans = INF; rep(i, N) ans = min(ans, min(dpl[i][i], dpr[i][i])); cout << ans << endl; }