#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... |