#include <bits/stdc++.h>
using namespace std;
vector<int> lis_left(const vector<long long>& a) {
vector<long long> tails;
vector<int> res(a.size());
for (int i = 0; i < (int)a.size(); i++) {
auto it = lower_bound(tails.begin(), tails.end(), a[i]);
if (it == tails.end()) tails.push_back(a[i]);
else *it = a[i];
res[i] = (int)(it - tails.begin() + 1);
}
return res;
}
vector<int> lis_right(const vector<long long>& a) {
int n = (int)a.size();
vector<long long> tails;
vector<int> res(n);
for (int i = n - 1; i >= 0; i--) {
auto it = lower_bound(tails.begin(), tails.end(), -a[i]);
if (it == tails.end()) tails.push_back(-a[i]);
else *it = -a[i];
res[i] = (int)(it - tails.begin() + 1);
}
return res;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
long long x;
cin >> n >> x;
vector<long long> t(n);
for (int i = 0; i < n; i++) cin >> t[i];
vector<int> L = lis_left(t);
vector<int> R = lis_right(t);
int ans = *max_element(L.begin(), L.end());
for (int i = 0; i + 1 < n; i++) {
if (t[i] + x < t[i + 1]) {
ans = max(ans, L[i] + R[i + 1]);
}
}
cout << ans << "\n";
return 0;
}
# | 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... |