#include "towers.h"
#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>
#define ff first
#define ss second
#define pii pair<int, int>
using namespace std;
vector<int> h;
void init(int N, std::vector<int> H) {
int n = N;
H.insert(H.begin(), 2e9);
H.push_back(2e9);
h = H;
}
int max_towers(int L, int R, int D) {
L++, R++;
int d = D;
vector<int> a(h.begin() + L, h.begin() + R+1);
int n = a.size();
a.insert(a.begin(), 2e9);
a.push_back(2e9);
vector<int> o(n);
iota(o.begin(), o.end(), 1);
sort(o.begin(), o.end(), [&] (int i, int j) {return a[i] < a[j];});
vector<int> v(n+2);
int ans = 0;
for (int i: o) {
int l = i-1, r = i+1;
bool bad = false;
while (a[l] < a[i] + d) {
if (v[l]) {bad = true; break;}
v[l--] = 1;
}
while (a[r] < a[i] + d) {
if (v[r]) {bad = true; break;}
v[r++] = 1;
}
if (bad) continue;
ans++;
}
return ans;
}