#include "bits/stdc++.h"
using namespace std;
using ll = long long;
using ld = long double;
using ull = unsigned long long;
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
// https://codeforces.com/blog/entry/79148
class Timer: chrono::high_resolution_clock {
const time_point start_time;
public:
Timer(): start_time(now()) {}
rep elapsed_time() const {
return chrono::duration_cast<chrono::milliseconds>(now() - start_time).count();
}
} timer;
int main() {
cin.tie(0);
ios::sync_with_stdio(0);
ll n, x, ans = 0;
cin >> n >> x;
vector<ll> a(n);
vector<pair<ll, ll>> op(n);
vector<ll> dp1, dp2;
for (ll i = 0; i < n - 1; i++) {
cin >> a[i];
auto it = lower_bound(dp1.begin(), dp1.end(), a[i]);
if (it != dp1.end()) {
op[i] = {it - dp1.begin(), *it};
*it = a[i];
}
else {
op[i] = {-1, -1};
dp1.push_back(a[i]);
}
}
cin >> a[n - 1];
for (ll i = n - 1; i > 0; i--) {
auto it = lower_bound(dp2.begin(), dp2.end(), -a[i]);
if (it != dp2.end()) {
*it = -a[i];
}
else {
dp2.push_back(-a[i]);
}
ll res = lower_bound(dp1.begin(), dp1.end(), -(dp2.back() - x)) - dp1.begin();
ans = max(ans, ll(res + dp2.size()));
res = lower_bound(dp2.begin(), dp2.end(), -(dp1.back() - x)) - dp2.begin();
ans = max(ans, ll(res + dp1.size()));
if (op[i - 1].first == -1) {
dp1.pop_back();
}
else {
dp1[op[i - 1].first] = op[i - 1].second;
}
}
cout << ans;
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... |