#include <bits/stdc++.h>
using namespace std;
#define int long long
#define f first
#define s second
#define sz(a) (int)a.size()
#define all(a) a.begin(),a.end()
const int N=2e5+5;
int M[N];
vector<int>comp;
struct Fenwick{
int n;
vector<int>fen;
Fenwick(int _n) : fen(_n+5,0) , n(_n){}
void reset(){
fill(all(fen),0);
}
int get(int i){
int res=0;
for(; i>0;i-=i&-i) res=max(res,fen[i]);
return res;
}
void update(int id,int val){
for( ; id<=n;id+=id&-id) fen[id]=max(fen[id],val);
}
};
int compress(int val){
return lower_bound(all(comp),val)-comp.begin()+1;
}
int dp0[N],dp1[N],dpr[N];
void solve(){
int n,x;cin>>n>>x;
for(int i=1;i<=n;++i) {
cin>>M[i];
comp.push_back(M[i]);
comp.push_back(M[i]+x);
}
sort(all(comp));
comp.erase(unique(all(comp)),comp.end());
int m=sz(comp);
Fenwick tree(m);
for(int i=1;i<=n;++i){
//khong dung x
int id=compress(M[i]);
int val=tree.get(id-1);
dp0[i]=val+1;
//dung x
val=tree.get(compress(M[i]+x)-1);
dp1[i]=val+1;
tree.update(id,dp0[i]);
}
tree.reset();
for(int i=n;i>=1;--i){
int newid=m-compress(M[i])+1;
dpr[i]=tree.get(newid-1)+1;
tree.update(newid,dpr[i]);
}
int ma=0;
for(int i=1;i<=n;++i){
ma=max(ma,dp1[i]+dpr[i]-1);
}
cout<<ma;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t=1;
//cin>>t;
while(t--) solve();
}
| # | 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... |