#include <bits/stdc++.h>
using namespace std ;
#define int long long
int gp[300003] ;
int dsu(int x){
if (x==gp[x]) return x ;
gp[x]=dsu(gp[x]) ;
return gp[x] ;
}
int ml[300003] ;
struct segt {
int seg[1200003] ;
void build(int id,int l,int r){
if (l==r) seg[id]=0 ;
else {
int md=(l+r)/2 ;
build(id*2,l,md),build(id*2+1,md+1,r) ;
}
}
void upd(int id,int l,int r,int x,int v){
if (l==r&&l==x) seg[id]=v ;
else if (l>x||r<x) return ;
else {
int md=(l+r)/2 ;
upd(id*2,l,md,x,v),upd(id*2+1,md+1,r,x,v) ;
seg[id]=max(seg[id*2],seg[id*2+1]) ;
}
}
int query(int id,int l,int r,int ql,int qr){
if (ql<=l&&r<=qr) return seg[id] ;
else if (l>qr||r<ql) return 0 ;
else {
int md=(l+r)/2 ;
return max(query(id*2,l,md,ql,qr),query(id*2+1,md+1,r,ql,qr)) ;
}
}
} ;
signed main(){
int n,d,i,j ;
cin >> n >> d ;
for (i = 1 ; i <= n ; i ++) gp[i]=i ;
int arr[300003] ;
set <int> st ;
for (i = 1 ; i <= n ; i ++) cin >> arr[i],st.insert(arr[i]) ;
i=1 ;
map <int,int> mp ;
for (auto x : st){
mp[x]=i ;
i++ ;
}
for (i = 1 ; i <= n ; i ++) arr[i]=mp[arr[i]] ;
set <int> stt ;
map <int,vector<int>> vvv ;
segt seg ;
seg.build(1,1,n) ;
for (i = 1 ; i <= n ; i ++) vvv[arr[i]].push_back(i) ;
for (auto [a,v] : vvv){
for (auto x : v){
stt.insert(x) ;
auto it=stt.find(x) ;
if (it!=stt.begin()){
auto it2=it ; it2-- ;
if (abs(*it2-*it)<=d) gp[dsu(*it)]=dsu(*it2) ;
}
if (it!=--stt.end()){
auto it2=it ; it2++ ;
if (abs(*it2-*it)<=d) gp[dsu(*it2)]=dsu(*it) ;
}
}
for (auto x : v) ml[x]=dsu(x) ;
// for (i = 1 ; i <= n ; i ++) cout << dsu(i) << " " ; cout << endl ;
}
// for (i = 1 ; i <= n ; i ++) cout << ml[i] << " " ; cout << endl ;
for (auto [a,v] : vvv){
reverse(v.begin(),v.end()) ;
for (auto x : v){
seg.upd(1,1,n,x,seg.query(1,1,n,ml[x],x)+1) ;
}
}
cout << seg.query(1,1,n,1,n) << endl ;
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... |