func_code_string: #include <bits/stdc++.h>   using namespace std;   long long n, d, b;   int nl[100100], nr[100100];   int find(int *next, int x) {     if (next[x] == x) return x;     return next[x] = find(next, next[x]);   }   long long bit[100100];   inline int lowbit(int x) { return x & -x; }   void add(int x, long long y) {     while (x <= n) {       bit[x] += y;       x += lowbit(x);     }   }   long long sum(int x) {     long long res = 0;     while (x > 0) {       res += bit[x];       x -= lowbit(x);     }     return res;   }   long long get(int x) { return sum(x) - sum(x - 1); }   int make(int x, int t) {     int nx = 0;     int l = max(1ll, x - t * d), r = min(n, x + t * d);     if (sum(r) - sum(l - 1) < b) return 1;     if (x == t) {       for (int i = l; i <= r; i = find(nl, i)) {         int gi = get(i);         nx += gi;         if (nx < b) {           add(i, -get(i));           nl[i] = i + 1;           nr[i] = i - 1;         } else {           add(i, nx - gi - b);           break;         }       }     } else {       for (int i = r; i >= l; i = find(nr, i)) {         int gi = get(i);         nx += gi;         if (nx < b) {           add(i, -get(i));           nl[i] = i + 1;           nr[i] = i - 1;         } else {           add(i, nx - gi - b);           break;         }       }     }     return 0;   }   int main() {     scanf( %d%d%d , &n, &d, &b);     memset(nl, 0, sizeof(nl));     memset(nr, 0, sizeof(nr));     for (int i = 1; i <= n; i++) {       int a;       scanf( %d , &a);       add(i, a);       if (a != 0) {         nl[i] = i;         nr[i] = i;       } else {         nl[i] = i + 1;         nr[i] = i - 1;       }     }     int x1 = 0, x2 = 0, l = 1, r = n;     while (l <= r) {       if (l == r)         x1 += make(l, l);       else if (x1 > x2) {         x1 += make(l, l);         x2 += make(r, l);       } else {         x2 += make(r, l);         x1 += make(l, l);       }       l++;       r--;     }     printf( %d n , max(x1, x2));     return 0;   }   