#include <bits/stdc++.h>
using namespace std;
int temps[200005];
int pref_longest[200005];
int main() {
int n;
int x;
cin >> n >> x;
for (int i=0; i<n; i++) {
cin >> temps[i];
}
vector<int> dp(n,INT_MAX);
int longest=0;
for (int i=0; i<n; i++) {
int j=lower_bound(dp.begin(),dp.end(),temps[i])-dp.begin();
dp[j]=temps[i];
pref_longest[i]=j+1;
longest=max(longest,pref_longest[i]);
}
dp=vector<int>(n,INT_MAX);
for (int i=n-1; i>=0; i--) {
int pos=lower_bound(dp.begin(),dp.end(),-temps[i]+x)-dp.begin();
longest=max(longest, pref_longest[i]+pos);
int insert_pos=lower_bound(dp.begin(),dp.end(),-temps[i])-dp.begin();
dp[insert_pos]=-temps[i];
}
cout << longest << '\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... |