func_code_string: #include <bits/stdc++.h>   using namespace std;   const int inf = 2e9 + 10, MAXN = 1e5 + 10;   int seg[4][MAXN * 4];   int n, S, l;   void update(int ind) {     seg[1][ind] = min(seg[1][((ind)*2)], seg[1][(((ind)*2) + 1)]);     seg[2][ind] = max(seg[2][((ind)*2)], seg[2][(((ind)*2) + 1)]);     seg[3][ind] = min(seg[3][((ind)*2)], seg[3][(((ind)*2) + 1)]);   }   void add(int s, int e, int ind, int x, int val, int t) {     if (s > x or e <= x) return;     if (s + 1 == e) {       seg[t][ind] = val;       return;     }     int mid = (s + e) / 2;     add(s, mid, ((ind)*2), x, val, t);     add(mid, e, (((ind)*2) + 1), x, val, t);     update(ind);   }   int fin(int s, int e, int ind, int x, int y, int t) {     if (s >= y or e <= x) return (t == 1 or t == 3) ? inf : -inf;     if (s >= x and e <= y) return seg[t][ind];     int mid = (s + e) / 2;     if (t == 1 or t == 3)       return min(fin(s, mid, ((ind)*2), x, y, t),                  fin(mid, e, (((ind)*2) + 1), x, y, t));     return max(fin(s, mid, ((ind)*2), x, y, t),                fin(mid, e, (((ind)*2) + 1), x, y, t));   }   void show() {     for (int i = 0; i < n; i++)       cerr << fin(0, n, 1, i, i + 1, 1) <<     << fin(0, n, 1, i, i + 1, 2)            << endl;   }   int main() {     scanf( %d%d%d , &n, &S, &l);     fill(seg[1], seg[1] + MAXN * 4, inf);     fill(seg[3], seg[3] + MAXN * 4, inf);     for (int i = 0; i < n; i++) {       int x;       scanf( %d , &x);       add(0, n, 1, i, x, 1);       add(0, n, 1, i, x, 2);     }     for (int i = 0; i < n; i++) {       int s = -1, e = i;       while (e - s > 1) {         int mid = (s + e) / 2;         if (fin(0, n, 1, mid, i + 1, 2) - fin(0, n, 1, mid, i + 1, 1) <= S)           e = mid;         else           s = mid;       }       if (e == 0 and i + 1 >= l) {         int res = 1;         add(0, n, 1, i, res, 3);         if (i == n - 1) {           printf( 1 n );           return 0;         }       } else if (i - e + 1 >= l) {         int res = fin(0, n, 1, e - 1, i - l + 1, 3);         res = min(res + 1, inf);         add(0, n, 1, i, res, 3);         if (i == n - 1) {           if (res == inf)             printf( -1 n );           else             printf( %d n , res);           return 0;         }       }     }     printf( -1 n );     return 0;   }   