func_code_string: #include <bits/stdc++.h>   using namespace std;   int n, s, ll, v[100011];   int dp[100011];   const int oo = 1 << 28;   int seg[400001];   int at, l, r;   void add(int n, int s, int e) {     if (at < s || at > e || s > e) return;     if (s == e) {       seg[n] = dp[s];       return;     }     add(n * 2, s, (s + e) / 2);     add(n * 2 + 1, (s + e) / 2 + 1, e);     seg[n] = min(seg[n * 2], seg[n * 2 + 1]);   }   int get(int n, int s, int e) {     if (l > e || r < s || l > r || s > e) return oo;     if (s >= l && e <= r) return seg[n];     return min(get(n * 2, s, (s + e) / 2), get(n * 2 + 1, (s + e) / 2 + 1, e));   }   int main() {     scanf( %d%d%d , &n, &s, &ll);     for (int i = 1; i <= n; ++i) scanf( %d , v + i);     set<pair<int, int> > q;     int E = n;     for (int i = n; i > 0; --i) {       dp[i] = oo;       q.insert(make_pair(v[i], i));       while ((--q.end())->first - q.begin()->first > s) {         q.erase(make_pair(v[E], E));         --E;       }       l = i + ll;       r = E + 1;       if (r >= l) {         if (r == n + 1)           dp[i] = 1;         else           dp[i] = min(dp[i], 1 + get(1, 1, n));       }       at = i;       add(1, 1, n);     }     if (dp[1] > 500000) dp[1] = -1;     printf( %d n , dp[1]);     return 0;   }   