//ZT. Tấn và cú nhảy thần sầu
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define For(i, a, b) for(int i = a; i <= b; ++i)
#define endl '\n'
const int maxn = 1e5 + 5;
int n, dp[maxn], bit1[maxn], bit2[maxn];
ll d, h[maxn];
vector<ll> comp;
void update(int bit[], int i, int val)
{
int m = comp.size();
for(; i <= m; i += i & -i) bit[i] = max(bit[i], val);
}
int get(int bit[], int i)
{
int res = 0;
for(; i > 0; i -= i & -i) res = max(res, bit[i]);
return res;
}
signed main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
// freopen("ZT.INP", "r", stdin);
// freopen("ZT.OUT", "w", stdout);
cin >> n >> d;
For(i, 1, n)
{
cin >> h[i];
comp.push_back(h[i]);
}
sort(comp.begin(), comp.end());
comp.erase(unique(comp.begin(), comp.end()), comp.end());
int m = comp.size();
int ans = 0;
For(i, 1, n)
{
int best = 0;
int p1 = upper_bound(comp.begin(), comp.end(), h[i] - d) - comp.begin();
if(p1 > 0)
best = max(best, get(bit1, p1));
int p2 = lower_bound(comp.begin(), comp.end(), h[i] + d) - comp.begin();
if(p2 < m)
best = max(best, get(bit2, m - p2));
dp[i] = best + 1;
int id = lower_bound(comp.begin(), comp.end(), h[i]) - comp.begin() + 1;
update(bit1, id, dp[i]);
update(bit2, m - id + 1, dp[i]);
ans = max(ans, dp[i]);
}
cout << ans;
}
Ly9aVC4gVOG6pW4gdsOgIGPDuiBuaOG6o3kgdGjhuqduIHPhuqd1CiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIEZvcihpLCBhLCBiKSBmb3IoaW50IGkgPSBhOyBpIDw9IGI7ICsraSkKI2RlZmluZSBlbmRsICdcbicKCmNvbnN0IGludCBtYXhuID0gMWU1ICsgNTsKCmludCBuLCBkcFttYXhuXSwgYml0MVttYXhuXSwgYml0MlttYXhuXTsKbGwgZCwgaFttYXhuXTsKdmVjdG9yPGxsPiBjb21wOwoKdm9pZCB1cGRhdGUoaW50IGJpdFtdLCBpbnQgaSwgaW50IHZhbCkKewogICAgaW50IG0gPSBjb21wLnNpemUoKTsKICAgIGZvcig7IGkgPD0gbTsgaSArPSBpICYgLWkpIGJpdFtpXSA9IG1heChiaXRbaV0sIHZhbCk7Cn0KCmludCBnZXQoaW50IGJpdFtdLCBpbnQgaSkKewogICAgaW50IHJlcyA9IDA7CiAgICBmb3IoOyBpID4gMDsgaSAtPSBpICYgLWkpIHJlcyA9IG1heChyZXMsIGJpdFtpXSk7CiAgICByZXR1cm4gcmVzOwp9CgpzaWduZWQgbWFpbigpCnsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShOVUxMKTsgY291dC50aWUoTlVMTCk7CgogICAgLy8gZnJlb3BlbigiWlQuSU5QIiwgInIiLCBzdGRpbik7CiAgICAvLyBmcmVvcGVuKCJaVC5PVVQiLCAidyIsIHN0ZG91dCk7CgogICAgY2luID4+IG4gPj4gZDsKCiAgICBGb3IoaSwgMSwgbikKICAgIHsKICAgICAgICBjaW4gPj4gaFtpXTsKICAgICAgICBjb21wLnB1c2hfYmFjayhoW2ldKTsKICAgIH0KCiAgICBzb3J0KGNvbXAuYmVnaW4oKSwgY29tcC5lbmQoKSk7CiAgICBjb21wLmVyYXNlKHVuaXF1ZShjb21wLmJlZ2luKCksIGNvbXAuZW5kKCkpLCBjb21wLmVuZCgpKTsKCiAgICBpbnQgbSA9IGNvbXAuc2l6ZSgpOwogICAgaW50IGFucyA9IDA7CgogICAgRm9yKGksIDEsIG4pCiAgICB7CiAgICAgICAgaW50IGJlc3QgPSAwOwoKICAgICAgICBpbnQgcDEgPSB1cHBlcl9ib3VuZChjb21wLmJlZ2luKCksIGNvbXAuZW5kKCksIGhbaV0gLSBkKSAtIGNvbXAuYmVnaW4oKTsKCiAgICAgICAgaWYocDEgPiAwKQogICAgICAgICAgICBiZXN0ID0gbWF4KGJlc3QsIGdldChiaXQxLCBwMSkpOwoKICAgICAgICBpbnQgcDIgPSBsb3dlcl9ib3VuZChjb21wLmJlZ2luKCksIGNvbXAuZW5kKCksIGhbaV0gKyBkKSAtIGNvbXAuYmVnaW4oKTsKCiAgICAgICAgaWYocDIgPCBtKQogICAgICAgICAgICBiZXN0ID0gbWF4KGJlc3QsIGdldChiaXQyLCBtIC0gcDIpKTsKCiAgICAgICAgZHBbaV0gPSBiZXN0ICsgMTsKCiAgICAgICAgaW50IGlkID0gbG93ZXJfYm91bmQoY29tcC5iZWdpbigpLCBjb21wLmVuZCgpLCBoW2ldKSAtIGNvbXAuYmVnaW4oKSArIDE7CgogICAgICAgIHVwZGF0ZShiaXQxLCBpZCwgZHBbaV0pOwogICAgICAgIHVwZGF0ZShiaXQyLCBtIC0gaWQgKyAxLCBkcFtpXSk7CgogICAgICAgIGFucyA9IG1heChhbnMsIGRwW2ldKTsKICAgIH0KCiAgICBjb3V0IDw8IGFuczsKfQo=