#include <bits/stdc++.h>
#define all(a) (a).begin(), (a).end()
using namespace std;
struct segtree {
vector<int> tree;
int offset = 1;
segtree(int n) {
while (offset < n) offset <<= 1;
tree.resize(offset << 1);
}
void update(int i, int x) {
tree[i += offset] = x;
while (i >>= 1) tree[i] = max(tree[2*i], tree[2*i + 1]);
}
int query(int v, int l, int r, int ql, int qr) {
if (ql <= l && r <= qr) return tree[v];
if (qr < l || r < ql) return 0;
int mid = (l+r)/2;
return max(query(v << 1, l, mid, ql, qr), query(v << 1 | 1, mid+1, r, ql, qr));
}
int query(int l, int r) { return query(1, 0, offset - 1, l, r); }
};
int one_bound_fish_very_very_good(vector<int> a, int z) {
int n = a.size();
auto b = a;
for (int i = 0; i < n; i++) {
b[i] = a[i] + z;
}
map<int, vector<int>> comp;
for (int i = 0; i < n; i++) {
comp[a[i]].push_back(i);
comp[b[i]].push_back(i + n);
}
int val = 1;
for (const auto& [x, ind] : comp) {
for (int i : ind) i < n ? a[i] = val : b[i - n] = val;
val++;
}
int pref[n];
vector<int> lis;
for (int i = 0; i < n; i++) {
auto it = lower_bound(lis.begin(), lis.end(), a[i]);
pref[i] = it - lis.begin() + 1;
if (it == lis.end()) lis.push_back(a[i]);
else *it = a[i];
}
segtree s(3*n);
int ans = pref[n-1];
for (int i = n-1; i >= 0; i--) {
int mx = s.query(b[i] + 1, 3*n - 1);
s.update(b[i], mx + 1);
if (0 < i) ans = max(ans, pref[i-1] + s.query(a[i-1] + 1, 3*n - 1));
}
return ans;
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(nullptr); cout.tie(nullptr);
int n,z; cin>>n>>z;
vector<int> a(n);
for (int& x : a) cin>>x;
int ans = one_bound_fish_very_very_good(a, z);
cout<<ans;
}
# | 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... |