#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pii pair<int,int>
const int maxn = 2e5 + 10;
int A[maxn];
//Seg tree
int tree[4 * maxn];
void update(int node, int l, int r, int pos, int val) {
if(l == r) {
tree[node] = val;
return;
}
int mid = (l + r) / 2;
if(pos <= mid) update(2 * node, l, mid, pos, val);
else update(2 * node + 1, mid + 1, r, pos, val);
tree[node] = max(tree[2 * node], tree[2 * node + 1]);
return;
}
int query(int node, int tl, int tr, int l, int r) {
if(tl > r || tr < l) return 0;
if(tl >= l && tr <= r) return tree[node];
int mid = (tl + tr) / 2;
return max(query(2 * node, tl, mid, l, r), query(2 * node + 1, mid + 1, tr, l ,r));
}
int32_t main() {
ios_base::sync_with_stdio(false); cin.tie(0);
int n, x; cin >> n >> x;
vector<int> ordered(n);
for (int i = 1; i <= n; i++) {
cin >> A[i];
ordered[i - 1] = A[i];
}
sort(ordered.begin(), ordered.end());
ordered.erase(unique(ordered.begin(), ordered.end()), ordered.end());
map<int,int> comp;
int id = 1;
for (auto x : ordered) comp[x] = id++;
vector<int> as(n + 1);
for (int i = n; i >= 1; i--) {
int aux = query(1, 1, n, comp[A[i]], n + 1);
as[i] = aux + 1;
update(1, 1, n, comp[A[i]], aux + 1);
}
priority_queue<pii, vector<pii>, greater<pii>> pq;
pq.push({-x, 0});
int res = 0;
vector<int> lis;
for (int i = 1; i < n; i++) {
while(!pq.empty() && pq.top().first <= A[i]) {
res = max(res, pq.top().second + as[i + 1]);
pq.pop();
}
auto it = lower_bound(lis.begin(), lis.end(), A[i]);
if(it == lis.end()) lis.push_back(A[i]);
else *it = A[i];
pq.push({A[i] - x, lis.size()});
}
cout << res << '\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... |