#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define pb push_back
#define int long long
const long long inf = 1e18;
const int MOD = 5000000;
const int N = 3e5 + 5;
int seg[N * 4], offset = 1, last2[N];
map<int,int> last;
void update(int idx, int val) {
idx += offset;
seg[idx] = val;
idx /= 2;
while (idx > 0) {
seg[idx] = max(seg[idx * 2], seg[idx * 2 + 1]);
idx /= 2;
}
}
int query(int node, int qlo, int qhi, int lo, int hi) {
if (lo >= qlo && hi <= qhi) {
return seg[node];
}
if (lo > qhi || hi < qlo)return 0;
int mid = (lo + hi) / 2;
return max(query(node * 2, qlo, qhi, lo, mid), query(node * 2 + 1, qlo, qhi, mid + 1, hi));
}
signed main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n, d;
cin >> n >> d;
int a[n], b[n], cnt = 1;
map<int, int> mp;
for (int i = 0; i < n; i++) {
cin >> a[i];
mp[a[i]];
b[i] = a[i];
}
sort(b, b + n);
int r = 0;
for (int i = 0; i < n; i++) {
while (r < n && b[i] + d > b[r])r++;
if (r != 0)last[b[i]] = b[r-1];
else last[b[i]] = -1;
}
while (offset < mp.size()+1)offset *= 2;
for (auto i: mp)mp[i.first] = cnt++;
int pref[n], suff[n];
for (int i = 0; i < n; i++) {
if (last[a[i]] == -1)last2[mp[a[i]]] = 0;
else last2[mp[a[i]]] = mp[last[a[i]]];
}
for (int i = 0; i < n; i++) {
a[i] = mp[a[i]];
int x = query(1, 0, last2[a[i]], 0, offset - 1) + 1;
pref[i] = x;
x = query(1, 0, a[i] - 1, 0, offset - 1) + 1;
update(a[i], x);
}
memset(seg, 0, sizeof(seg));
for (int i = n - 1; i >= 0; i--) {
int x;
if (a[i] + 1 > cnt - 1)x = 1;
else x = query(1, a[i] + 1, cnt - 1, 0, offset - 1) + 1;
suff[i] = x;
update(a[i], x);
}
int ans = suff[0];
for (int i = 1; i < n; i++) {
ans = max(ans, pref[i] + suff[i] - 1);
}
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... |