#include "bits/stdc++.h"
using namespace std;
 
#define vec vector
#define int long long
#define all(x) (x).begin(), (x).end()
 
const int mod = 1e9 + 7;
const int inf = 1e18;
signed main() {
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	int n, x; cin >> n >> x;
	vec<int> a(n);
	for (int &x: a) cin >> x;
	vec<int> lis_from(n);
	vec<int> cur; cur.reserve(n);
	for (int i = n - 1; i >= 0; i--) {
		if (cur.empty() || a[i] < cur.back()) {
			cur.push_back(a[i]);
			lis_from[i] = cur.size();
		} else {
			int l = 0, r = cur.size() - 1;
			
			int ans = r;
			while (l <= r) {
				int mid = l + (r - l) / 2;
				if (cur[mid] <= a[i]) ans = mid, r = mid - 1;
				else l = mid + 1;
			}
			cur[ans] = a[i];
			lis_from[i] = ans + 1;
		}
	}
	// for (int i = 0; i < n; i++) cerr << lis_from[i] << ' ';
	// cerr << '\n';
	int ans = 0;
	cur.clear();
	for (int i = 0; i < n; i++) {
		int q = a[i] + x;
		if (cur.empty() || q > cur.back()) ans = max(ans, lis_from[i]);
		else {
			int len = lower_bound(all(cur), q) - cur.begin();
			ans = max(ans, len + lis_from[i]);
		}
		if (cur.empty() || a[i] > cur.back()) cur.push_back(a[i]);
		else *lower_bound(all(cur), a[i]) = a[i];
	}
	cout << ans << '\n';
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |