This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#define ff first
#define ss second
using namespace std;
using ll = long long;
int stx;
vector<int> LIS1(vector<int> a) {
int n = a.size();
vector<int> dp(n + 1, 2e9);
dp[0] = -2e9;
vector<int> ans;
for (int x : a) {
auto it = lower_bound(dp.begin(), dp.end(), x);
ans.push_back(it - dp.begin());
*it = x;
}
return ans;
}
vector<int> LIS2(vector<int> a) {
int n = a.size();
reverse(a.begin(), a.end());
vector<int> dp(n+1, -2e9);
dp[0] = +2e9;
vector<int> ans;
for (int x : a) {
auto it = prev(upper_bound(dp.rbegin(), dp.rend(), x));
ans.push_back(dp.rend() - prev(upper_bound(dp.rbegin(), dp.rend(), x - stx)) - 1);
*it = x;
}
reverse(ans.begin(), ans.end());
return ans;
}
void solve() {
int n;
cin >> n >> stx;
vector<int> a(n);
for (int& x : a) cin >> x;
vector<int> lr = LIS1(a);
vector<int> rl = LIS2(a);
int ans = 0;
for (int i = 0; i < n; i++) ans = max(ans, lr[i] + rl[i] - 1);
cout << ans << endl;
}
int main() {
int t = 1;
//cin >> t;
while (t--) solve();
}
# | 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... |