#include <bits/stdc++.h>
using namespace std;
int R[300001], u, i, n, m, j;
struct pt {
  int mi, ma, vmi, vma;
};
pt st[4 * 300001];
pt operator+(const pt &a, const pt &b) {
  pt kq;
  if (a.mi < b.mi) {
    kq.mi = a.mi;
    kq.vmi = a.vmi;
  } else {
    kq.mi = b.mi;
    kq.vmi = b.vmi;
  }
  if (a.ma > b.ma) {
    kq.ma = a.ma;
    kq.vma = a.vma;
  } else {
    kq.ma = b.ma;
    kq.vma = b.vma;
  }
  return kq;
}
void update(int id, int l, int r, int u, int mi, int ma) {
  if (u < l || u > r) return;
  if (l == r) {
    st[id] = {mi, ma, u, u};
    return;
  }
  int mid = (l + r) >> 1;
  update(id * 2, l, mid, u, mi, ma);
  update(id * 2 + 1, mid + 1, r, u, mi, ma);
  st[id] = st[id * 2] + st[id * 2 + 1];
}
pt get(int id, int l, int r, int u, int v) {
  if (u > r || v < l) return {m + 1, 0, 0, 0};
  if (u <= l && r <= v) return st[id];
  int mid = (l + r) >> 1;
  return get(id * 2, l, mid, u, v) + get(id * 2 + 1, mid + 1, r, u, v);
}
struct lr {
  int l, r;
};
lr v[300001][22];
int Min(int i, int j) {
  if (i - R[i] < j - R[j]) return i;
  return j;
}
int Max(int i, int j) {
  if (i + R[i] > j + R[j]) return i;
  return j;
}
bool check(int u, int x) {
  int lg = trunc(log2(m)) + 1, l = u, r = u;
  for (int i = lg; i >= 0; i--)
    if (x - (1 << i) > 0) {
      x -= (1 << i);
      int ll = Min(l, Min(v[l][i].l, v[r][i].l));
      int rr = Max(r, Max(v[l][i].r, v[r][i].r));
      l = ll;
      r = rr;
    }
  int ll = l - R[l], rr = r + R[r];
  return rr - ll + 1 >= n;
}
void in(int i, int j) { cerr << v[i][j].l << " " << v[i][j].r << '\n'; }
int b[300001];
bool cmp(int i, int j) { return R[i] > R[j]; }
int main() {
  cin >> n;
  for (i = 1; i <= n; i++) cin >> R[i];
  for (i = n + 1; i <= 2 * n; i++) R[i] = R[i - n];
  for (i = 2 * n + 1; i <= 3 * n; i++) R[i] = R[i - n];
  m = 3 * n;
  for (i = 1; i <= m; i++) update(1, 1, m, i, i - R[i], i + R[i]);
  for (i = 1; i <= m; i++) b[i] = i;
  for (i = 1; i <= m; i++) {
    int l = i - R[i], r = i + R[i];
    pt x = get(1, 1, m, l, r);
    v[i][0] = {x.vmi, x.vma};
  }
  for (int j = 1; (1 << j) <= m; j++)
    for (i = 1; i <= m; i++) {
      {
        int l = v[i][j - 1].l, r = v[i][j - 1].r;
        v[i][j].l = Min(v[i][j - 1].l, Min(v[l][j - 1].l, v[r][j - 1].l));
        v[i][j].r = Max(v[i][j - 1].r, Max(v[l][j - 1].r, v[r][j - 1].r));
      }
    }
  for (i = n + 1; i <= 2 * n; i++) {
    if (n == 1) {
      cout << 0 << " ";
      continue;
    }
    int l = 1, r = n;
    while (l < r) {
      int mid = (l + r) >> 1;
      if (check(i, mid))
        r = mid;
      else {
        l = mid + 1;
      }
    }
    cout << l << " ";
  }
}
