#include <bits/stdc++.h>
#include <stdio.h>
#define __Shibae__ signed main()
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define fiopen(Path) freopen(Path".INP", "r", stdin); freopen(Path".OUT", "w", stdout);
#define fipen(Path) freopen(Path".INP", "r", stdin);
#define sz(s) (int)s.size()
#define all(x) x.begin(), x.end()
#define maxHeap priority_queue<int>
#define minHeap priority_queue<int, vector<int>, greater<int>>
#define getBit(x, k) (((x) >> (k)) & 1)
#define MASK(i) (1LL << (i))
#define SQR(x) (1LL * ((x) * (x)))
#define db double
#define ld long double
#define ui unsigned int
#define ll long long
#define ii pair<int, int>
#define pli pair<ll, int>
#define pil pair<int, ll>
#define pll pair<ll, ll>
#define fi first
#define se second
#define FOR(i, a, b) for(int i = a, _b = b; i <= _b; i += 1)
#define FOD(i, a, b) for(int i = a, _b = b; i >= _b; i -= 1)
#define REP(i, a) for(int i = 0, _a = a; i < _a; i++)
#define pb push_back
#define fau(u, a) for(auto &u : a)
using namespace std;
const ll mod = 1e9 + 7;
const int INF = 1e9 + 7;
const ll INFLL = (ll)2e18 + 7LL;
const ld PI = acos(-1);
const int MAX = 5e5+5;
const int dx[] = {1, -1, 0, 0, -1, 1, 1, -1};
const int dy[] = {0, 0, 1, -1, -1, -1, 1, 1};
mt19937 rd(chrono::steady_clock::now().time_since_epoch().count());
ll Rand(ll l, ll r)
{
return l + rd() % (r - l + 1);
}
template<class SHIBA, class ENGINE>
bool minimize(SHIBA &x, const ENGINE y)
{
if(x > y)
{
x = y;
return true;
}
else return false;
}
template<class SHIBA, class ENGINE>
bool maximize(SHIBA &x, const ENGINE y)
{
if(x < y)
{
x = y;
return true;
}
else return false;
}
/* Template by: Nguyen Nhat Anh from Luong Van Chanh High School for the gifted */
/* From Min Tuoi with love */
/** TRY HARD **/
/** ORZ **/
/* -----------------[ MAIN CODE ]----------------- */
int n, x;
int a[MAX];
vector<int> arr;
int ff[MAX];
void input()
{
cin >> n >> x;
FOR(i, 1, n)
{
cin >> a[i];
arr.pb(a[i]);
arr.pb(a[i] + x);
}
}
struct SegmentTree
{
int st[MAX << 2];
int n;
void build(int _)
{
memset(st, 0, sizeof st);
n = _;
}
void update(int p, int k)
{
p--;
for (maximize(st[p += n], k); p > 1; p >>= 1) maximize(st[p >> 1], max(st[p], st[p ^ 1]));
}
int get(int l, int r)
{
l--;
int res = 0;
for (l += n, r += n; l < r; l >>= 1, r >>= 1)
{
if (l & 1) maximize(res, st[l++]);
if (r & 1) maximize(res, st[--r]);
}
return res;
}
}st;
void solve()
{
sort(all(arr));
arr.resize(unique(all(arr)) - arr.begin());
st.build(2*n);
st.build(2*n);
int res = 1;
FOD(i, n, 1)
{
int t = lower_bound(all(arr), a[i] + x) - arr.begin() + 1;
ff[i] = st.get(t+1, 2*n) + 1;
maximize(res, ff[i]);
st.update(t, ff[i]);
}
st.build(2*n);
FOR(i, 1, n)
{
int t = lower_bound(all(arr), a[i]) - arr.begin() + 1;
int tt = lower_bound(all(arr), a[i] + x) - arr.begin() + 1;
maximize(res, st.get(1, tt-1) + ff[i]);
st.update(t, st.get(1, t-1) + 1);
}
assert(*max_element(ff+1, ff+1+n) == st.get(1, 2*n));
cout << res;
}
__Shibae__
{
IOS
fipen("DAYDEP");
const bool multitest = 0;
int tt = 1; if(multitest) cin >> tt;
while( tt-- ){
input();
solve();
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNpbmNsdWRlIDxzdGRpby5oPgoKI2RlZmluZSBfX1NoaWJhZV9fICAgICAgc2lnbmVkIG1haW4oKQojZGVmaW5lIElPUyAgICAgICAgICAgICBpb3M6OnN5bmNfd2l0aF9zdGRpbygwKTsgY2luLnRpZSgwKTsgY291dC50aWUoMCk7CiNkZWZpbmUgZmlvcGVuKFBhdGgpICAgIGZyZW9wZW4oUGF0aCIuSU5QIiwgInIiLCBzdGRpbik7IGZyZW9wZW4oUGF0aCIuT1VUIiwgInciLCBzdGRvdXQpOwojZGVmaW5lIGZpcGVuKFBhdGgpICAgICBmcmVvcGVuKFBhdGgiLklOUCIsICJyIiwgc3RkaW4pOwojZGVmaW5lIHN6KHMpICAgICAgICAgICAoaW50KXMuc2l6ZSgpCiNkZWZpbmUgYWxsKHgpICAgICAgICAgIHguYmVnaW4oKSwgeC5lbmQoKQojZGVmaW5lIG1heEhlYXAgICAgICAgICBwcmlvcml0eV9xdWV1ZTxpbnQ+CiNkZWZpbmUgbWluSGVhcCAgICAgICAgIHByaW9yaXR5X3F1ZXVlPGludCwgdmVjdG9yPGludD4sIGdyZWF0ZXI8aW50Pj4KI2RlZmluZSBnZXRCaXQoeCwgaykgICAgKCgoeCkgPj4gKGspKSAmIDEpCiNkZWZpbmUgTUFTSyhpKSAgICAgICAgICgxTEwgPDwgKGkpKQojZGVmaW5lIFNRUih4KSAgICAgICAgICAoMUxMICogKCh4KSAqICh4KSkpCiNkZWZpbmUgZGIgICAgICAgICAgICAgIGRvdWJsZQojZGVmaW5lIGxkICAgICAgICAgICAgICBsb25nIGRvdWJsZQojZGVmaW5lIHVpICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQKI2RlZmluZSBsbCAgICAgICAgICAgICAgbG9uZyBsb25nCiNkZWZpbmUgaWkgICAgICAgICAgICAgIHBhaXI8aW50LCBpbnQ+CiNkZWZpbmUgcGxpICAgICAgICAgICAgIHBhaXI8bGwsIGludD4KI2RlZmluZSBwaWwgICAgICAgICAgICAgcGFpcjxpbnQsIGxsPgojZGVmaW5lIHBsbCAgICAgICAgICAgICBwYWlyPGxsLCBsbD4KI2RlZmluZSBmaSAgICAgICAgICAgICAgZmlyc3QKI2RlZmluZSBzZSAgICAgICAgICAgICAgc2Vjb25kCgojZGVmaW5lIEZPUihpLCBhLCBiKSAgICBmb3IoaW50IGkgPSBhLCBfYiA9IGI7IGkgPD0gX2I7IGkgKz0gMSkKI2RlZmluZSBGT0QoaSwgYSwgYikgICAgZm9yKGludCBpID0gYSwgX2IgPSBiOyBpID49IF9iOyBpIC09IDEpCiNkZWZpbmUgUkVQKGksIGEpICAgICAgIGZvcihpbnQgaSA9IDAsIF9hID0gYTsgaSA8IF9hOyBpKyspCiNkZWZpbmUgcGIgICAgICAgICAgICAgIHB1c2hfYmFjawojZGVmaW5lIGZhdSh1LCBhKSAgICAgICBmb3IoYXV0byAmdSA6IGEpCgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3QgbGwgbW9kID0gMWU5ICsgNzsKY29uc3QgaW50IElORiA9IDFlOSArIDc7CmNvbnN0IGxsIElORkxMID0gKGxsKTJlMTggKyA3TEw7CmNvbnN0IGxkIFBJID0gYWNvcygtMSk7CmNvbnN0IGludCBNQVggPSA1ZTUrNTsKIApjb25zdCBpbnQgZHhbXSA9IHsxLCAtMSwgMCwgMCwgLTEsIDEsIDEsIC0xfTsKY29uc3QgaW50IGR5W10gPSB7MCwgMCwgMSwgLTEsIC0xLCAtMSwgMSwgMX07CgptdDE5OTM3IHJkKGNocm9ubzo6c3RlYWR5X2Nsb2NrOjpub3coKS50aW1lX3NpbmNlX2Vwb2NoKCkuY291bnQoKSk7CgpsbCBSYW5kKGxsIGwsIGxsIHIpIAp7CiAgICByZXR1cm4gbCArIHJkKCkgJSAociAtIGwgKyAxKTsKfQoKdGVtcGxhdGU8Y2xhc3MgU0hJQkEsIGNsYXNzIEVOR0lORT4KICAgIGJvb2wgbWluaW1pemUoU0hJQkEgJngsIGNvbnN0IEVOR0lORSB5KQogICAgewogICAgICAgIGlmKHggPiB5KQogICAgICAgIHsKICAgICAgICAgICAgeCA9IHk7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0gCiAgICAgICAgZWxzZSByZXR1cm4gZmFsc2U7CiAgICB9CnRlbXBsYXRlPGNsYXNzIFNISUJBLCBjbGFzcyBFTkdJTkU+CiAgICBib29sIG1heGltaXplKFNISUJBICZ4LCBjb25zdCBFTkdJTkUgeSkKICAgIHsKICAgICAgICBpZih4IDwgeSkKICAgICAgICB7CiAgICAgICAgICAgIHggPSB5OwogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgZWxzZSByZXR1cm4gZmFsc2U7CiAgICB9CgoKLyogVGVtcGxhdGUgYnk6IE5ndXllbiBOaGF0IEFuaCBmcm9tIEx1b25nIFZhbiBDaGFuaCBIaWdoIFNjaG9vbCBmb3IgdGhlIGdpZnRlZCAqLwovKiBGcm9tIE1pbiBUdW9pIHdpdGggbG92ZSAqLwogICAgICAgIC8qKiAgICAgICBUUlkgSEFSRCAgICAgICAgKiovCiAgICAgICAgLyoqICAgICAgICAgIE9SWiAgICAgICAgICAqKi8KCi8qIC0tLS0tLS0tLS0tLS0tLS0tWyBNQUlOIENPREUgXS0tLS0tLS0tLS0tLS0tLS0tICovCgppbnQgbiwgeDsKaW50IGFbTUFYXTsKdmVjdG9yPGludD4gYXJyOwppbnQgZmZbTUFYXTsKCnZvaWQgaW5wdXQoKQp7CiAgICBjaW4gPj4gbiA+PiB4OwogICAgRk9SKGksIDEsIG4pCiAgICB7CiAgICAgICAgY2luID4+IGFbaV07CiAgICAgICAgYXJyLnBiKGFbaV0pOwogICAgICAgIGFyci5wYihhW2ldICsgeCk7CiAgICB9Cn0KCnN0cnVjdCBTZWdtZW50VHJlZQp7CiAgICBpbnQgc3RbTUFYIDw8IDJdOwogICAgaW50IG47CgogICAgdm9pZCBidWlsZChpbnQgXykKICAgIHsKICAgICAgICBtZW1zZXQoc3QsIDAsIHNpemVvZiBzdCk7CiAgICAgICAgbiA9IF87CiAgICB9CgogICAgdm9pZCB1cGRhdGUoaW50IHAsIGludCBrKQogICAgewogICAgICAgIHAtLTsKICAgICAgICBmb3IgKG1heGltaXplKHN0W3AgKz0gbl0sIGspOyBwID4gMTsgcCA+Pj0gMSkgbWF4aW1pemUoc3RbcCA+PiAxXSwgbWF4KHN0W3BdLCBzdFtwIF4gMV0pKTsKICAgIH0KCiAgICBpbnQgZ2V0KGludCBsLCBpbnQgcikKICAgIHsKICAgICAgICBsLS07CiAgICAgICAgaW50IHJlcyA9IDA7CiAgICAgICAgZm9yIChsICs9IG4sIHIgKz0gbjsgbCA8IHI7IGwgPj49IDEsIHIgPj49IDEpCiAgICAgICAgewogICAgICAgICAgICBpZiAobCAmIDEpIG1heGltaXplKHJlcywgc3RbbCsrXSk7CiAgICAgICAgICAgIGlmIChyICYgMSkgbWF4aW1pemUocmVzLCBzdFstLXJdKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlczsKICAgIH0KfXN0OwoKdm9pZCBzb2x2ZSgpCnsKICAgIHNvcnQoYWxsKGFycikpOwogICAgYXJyLnJlc2l6ZSh1bmlxdWUoYWxsKGFycikpIC0gYXJyLmJlZ2luKCkpOwogICAgc3QuYnVpbGQoMipuKTsKCiAgICBzdC5idWlsZCgyKm4pOwogICAgaW50IHJlcyA9IDE7CgogICAgRk9EKGksIG4sIDEpCiAgICB7CiAgICAgICAgaW50IHQgPSBsb3dlcl9ib3VuZChhbGwoYXJyKSwgYVtpXSArIHgpIC0gYXJyLmJlZ2luKCkgKyAxOwogICAgICAgIGZmW2ldID0gc3QuZ2V0KHQrMSwgMipuKSArIDE7CiAgICAgICAgbWF4aW1pemUocmVzLCBmZltpXSk7CiAgICAgICAgc3QudXBkYXRlKHQsIGZmW2ldKTsKICAgIH0KCiAgICBzdC5idWlsZCgyKm4pOwoKICAgIEZPUihpLCAxLCBuKQogICAgewogICAgICAgIGludCB0ID0gbG93ZXJfYm91bmQoYWxsKGFyciksIGFbaV0pIC0gYXJyLmJlZ2luKCkgKyAxOwogICAgICAgIGludCB0dCA9IGxvd2VyX2JvdW5kKGFsbChhcnIpLCBhW2ldICsgeCkgLSBhcnIuYmVnaW4oKSArIDE7CgogICAgICAgIG1heGltaXplKHJlcywgc3QuZ2V0KDEsIHR0LTEpICsgZmZbaV0pOwoKICAgICAgICBzdC51cGRhdGUodCwgc3QuZ2V0KDEsIHQtMSkgKyAxKTsKICAgIH0KICAgIGFzc2VydCgqbWF4X2VsZW1lbnQoZmYrMSwgZmYrMStuKSA9PSBzdC5nZXQoMSwgMipuKSk7CiAgICBjb3V0IDw8IHJlczsKfQoKX19TaGliYWVfXwp7CiAgICBJT1MKICAgIGZpcGVuKCJEQVlERVAiKTsKCiAgICBjb25zdCBib29sIG11bHRpdGVzdCA9IDA7CiAgICBpbnQgdHQgPSAxOyBpZihtdWx0aXRlc3QpIGNpbiA+PiB0dDsKIAogICAgd2hpbGUoIHR0LS0gKXsKICAgICAgICBpbnB1dCgpOwogICAgICAgIHNvbHZlKCk7CiAgICB9CiAKICAgIHJldHVybiAwOwp9