func_code_string: #include <bits/stdc++.h>   using namespace std;   const int infint = 1e9;   const long long inf = 1e18;   const int MOD = (int)1e9 + 7;   const int MAXN = (int)3e5 + 7;   const int LOG = 17;   int a[MAXN], n, IL[MAXN], IR[MAXN], Lp, Rp, ans, L, R;   pair<int, int> G, seg[LOG][2 * MAXN];   pair<int, int> operator*(const pair<int, int> &a, pair<int, int> b) {     return {min(a.first, b.first), max(a.second, b.second)};   }   void update(int BASE, int idx, int x, int y) {     for (seg[BASE][idx += 3 * n] = {x, y}; idx > 1; idx >>= 1)       seg[BASE][idx >> 1] = seg[BASE][idx] * seg[BASE][idx ^ 1];   }   pair<int, int> get(int BASE, int l, int r) {     pair<int, int> res = {3 * n, 0};     for (l += 3 * n, r += 3 * n; l < r; l >>= 1, r >>= 1) {       if (l & 1) res = res * seg[BASE][l++];       if (r & 1) res = res * seg[BASE][--r];     }     return res;   }   int main() {     scanf( %d , &n);     for (int i = 0; i < n; i++) scanf( %d , &a[i]);     for (int i = n; i < 3 * n; i++) a[i] = a[i % n];     for (int i = 0; i < LOG; i++)       for (int j = 0; j < MAXN; j++) seg[i][j] = {3 * n, 0};     for (int i = 0; i < 3 * n; i++) {       update(0, i, max(0, i - a[i]), min(i + a[i], 3 * n - 1));       IL[i] = max(0, i - a[i]), IR[i] = min(i + a[i], 3 * n - 1);     }     for (int i = 1; i < LOG; i++) {       for (int j = 0; j < 3 * n; j++) {         G = get(i - 1, IL[j], IR[j] + 1);         Lp = G.first, Rp = G.second;         IL[j] = Lp, IR[j] = Rp;         update(i, j, Lp, Rp);       }     }     if (n == 1) return cout << 0, 0;     for (int j = n; j < 2 * n; j++) {       ans = 0, L = j, R = j;       for (int lg = 16; lg >= 0; lg--) {         G = get(lg, L, R + 1);         if (G.second - G.first + 1 < n) {           ans += (1 << lg);           Lp = G.first, Rp = G.second;           L = Lp, R = Rp;         }       }       printf( %d  , ans + 1);     }   }   