#include <bits/stdc++.h>
#define int long long
#define FOR(i, a, b) for (int i = (a), _b = (b); i <= _b; ++i)
#define REV(i, a, b) for (int i = (a), _b = (b); i >= _b; --i)
using namespace std;
#define MAXN 200005
int n, x;
int a[MAXN];
int b[MAXN];
int rev_lis[MAXN];
int lis[MAXN];
vector<int> comp;
struct SMT {
int n;
vector<int> st;
SMT(int _n = 0){
n = _n;
st.assign((n << 2) + 5, 0);
}
void upd(int id, int l, int r, int p, int val) {
if (p < l || r < p) return;
if (l == r){
st[id] = max(st[id], val);
return;
}
int mid = (l + r) >> 1;
upd(id << 1, l, mid, p, val);
upd(id << 1 | 1, mid + 1, r, p, val);
st[id] = max(st[id << 1], st[id << 1 | 1]);
}
void upd(int p, int val){
upd(1, 1, n, p, val);
}
int get(int id, int l, int r, int u, int v){
if (v < l || r < u) return 0;
if (u <= l && r <= v) return st[id];
int mid = (l + r) >> 1;
return max(get(id << 1, l, mid, u, v), get(id << 1 | 1, mid + 1, r, u, v));
}
int get(int u, int v){
return get(1, 1, n, u, v);
}
};
void compression(){
FOR(i, 1, n){
comp.push_back(a[i]);
comp.push_back(b[i]);
}
sort(comp.begin(), comp.end());
comp.erase(unique(comp.begin(), comp.end()), comp.end());
FOR(i, 1, n){
a[i] = lower_bound(comp.begin(), comp.end(), a[i]) - comp.begin() + 1;
b[i] = lower_bound(comp.begin(), comp.end(), b[i]) - comp.begin() + 1;
}
}
void solve(){
cin >> n >> x;
FOR(i, 1, n) {
cin >> a[i];
}
FOR(i, 1, n){
b[i] = a[i] - x;
}
compression();
SMT tree(comp.size());
REV(i, n, 1){
int val = tree.get(a[i] + 1, comp.size());
rev_lis[i] = val + 1;
tree.upd(a[i], rev_lis[i]);
}
tree = SMT(comp.size());
int res = 0;
FOR(i, 1, n) {
// try to get res
int best = tree.get(1, a[i] - 1);
res = max(res, best + rev_lis[i]);
int val = tree.get(1, b[i] - 1);
lis[i] = val + 1;
tree.upd(b[i], lis[i]);
}
cout << res;
}
int32_t main(){
ios_base::sync_with_stdio(false);
cin.tie(nullptr); cout.tie(nullptr);
solve();
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... |