#include<bits/stdc++.h>
using namespace std;
const int N = 2e5+5;
long long n,X,t[N];
long long b[N];
long long pre[N],suf[N];
long long bs1(long long x,long long l,long long r) {
long long m = 0;
while(l <= r) {
long long mid = (l+r) /2;
if (t[b[mid]] < x) {
m = mid;
l = mid+1;
} else r = mid-1;
}
return b[m];
}
long long bs2(long long x,long long l,long long r) {
long long m = 0;
while(l <= r) {
long long mid = (l+r) /2;
if (t[b[mid]] > x) {
m = mid;
l = mid+1;
} else r = mid-1;
}
return b[m];
}
long long bs3(long long x,long long l,long long r) {
long long m = 0;
while(l <= r) {
long long mid = (l+r) /2;
if (t[b[mid]] > x-X) {
m = mid;
l = mid+1;
} else r = mid-1;
}
return b[m];
}
long long bs4(long long x,long long l,long long r) {
long long m = 0;
while(l <= r) {
long long mid = (l+r) /2;
if (t[b[mid]] < x+X) {
m = mid;
l = mid+1;
} else r = mid-1;
}
return b[m];
}
long long ans = 0;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> X;
for (int i= 1; i <= n;i ++) {
cin >> t[i];
}
long long res = 0;
for (int i = 1; i <= n; i++) {
b[i] = 0;
}
for (int i = 1;i <=n; i++) {
pre[i] = pre[bs1(t[i],1,res)]+1;
b[pre[i]] = i;
res= max(res,pre[i]);
}
res = 0;
for (int i = 1; i <= n; i++) {
b[i] = 0;
}
for (int i = n;i >= 1; i--) {
suf[i] = suf[bs2(t[i],1,res)]+1;
b[suf[i]] = i;
res= max(res,suf[i]);
}
res = 0;
for (int i = 1; i <= n; i++) {
b[i] = 0;
}
for (int i = n;i >= 1; i--) {
// suf[i] = suf[bs(t[i],1,res)]+1;
ans = max(ans,pre[i]+suf[bs3(t[i],1,res)]);
b[suf[i]] = i;
res= max(res,suf[i]);
}
res = 0;
for (int i = 1; i <= n; i++) {
b[i] = 0;
}
for (int i = 1;i <= n; i++) {
// suf[i] = suf[bs(t[i],1,res)]+1;
ans = max(ans,pre[bs4(t[i],1,res)]+suf[i]);
b[pre[i]] = i;
res= max(res,pre[i]);
}
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... |