func_code_string: #include <bits/stdc++.h>   int n, a[500005], L[500005], f[500005][22], g[500005][22];   long long ans;   int get(int x, int y) {     if (x < 0) return 0;     int k = (int)log2(y - x + 1);     return L[f[x][k]] <= L[f[y + 1 - (1 << k)][k]] ? f[x][k]                                                    : f[y + 1 - (1 << k)][k];   }   int main() {     scanf( %d , &n);     for (int i = 0; i < n; i++) scanf( %d , &a[i]), a[n + i] = a[i];     for (int i = 0; i < n + n; i++) L[i] = i - a[i], f[i][0] = i;     for (int j = 0; j < 19; j++)       for (int i = 0; i < n + n - (1 << j); i++)         f[i][j + 1] =             L[f[i][j]] <= L[f[i + (1 << j)][j]] ? f[i][j] : f[i + (1 << j)][j];     for (int i = 0; i < n + n; i++) g[i][0] = get(L[i], i);     for (int j = 0; j < 19; j++)       for (int i = 0; i < n + n; i++) g[i][j + 1] = g[g[i][j]][j];     for (int i = 0; i < n + n; i++)       if (i >= n) {         int x = i;         ans += 1 + (L[i] > i - n + 1);         for (int j = 19; j >= 0; j--)           if (L[g[x][j]] > i - n + 1) x = g[x][j], ans += 1 << j;       }     printf( %I64d n , ans);     return 0;   }   