#include<bits/stdc++.h>
#define ll long long
#define lc id*2+1
#define rc id*2+2
#define F first
#define S second
using namespace std;
int val[1200010],tag[1200010];
void build(int l,int r,int id){
tag[id]=-1;
if(l==r)return;
int m=(l+r)>>1;
build(l,m,lc);
build(m+1,r,rc);
}
void addtag(int id,int v){
tag[id]=v;
val[id]=v;
}
void push(int id){
if(tag[id]!=-1){
addtag(lc,tag[id]);
addtag(rc,tag[id]);
tag[id]=-1;
}
}
void modify(int l,int r,int id,int L,int R,int v){
if(L>R)return;
if(l==L&&r==R){
addtag(id,v);
return;
}
push(id);
int m=(l+r)>>1;
if(R<=m){
modify(l,m,lc,L,R,v);
}else if(L>m){
modify(m+1,r,rc,L,R,v);
}else{
modify(l,m,lc,L,m,v);
modify(m+1,r,rc,m+1,R,v);
}
val[id]=max(val[lc],val[rc]);
}
int query(int l,int r,int id,int L,int R){
if(L>R)return 0;
if(l==L&&r==R){
return val[id];
}
push(id);
int m=(l+r)>>1;
if(R<=m){
return query(l,m,lc,L,R);
}else if(L>m){
return query(m+1,r,rc,L,R);
}else{
return max(query(l,m,lc,L,m),query(m+1,r,rc,m+1,R));
}
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
int n,d;
cin>>n>>d;
vector<int> v,use;
for(int i=0;i<n;i++){
int a;
cin>>a;
v.push_back(a);
use.push_back(a);
}
sort(use.begin(),use.end());
use.erase(unique(use.begin(),use.end()),use.end());
int sz=use.size();
for(int i=0;i<n;i++){
v[i]=lower_bound(use.begin(),use.end(),v[i])-use.begin()+1;
}
build(1,sz,0);
deque<pair<int,int>> qu;
qu.push_back({0,v[0]});
modify(1,sz,0,v[0],v[0],1);
for(int i=1;i<n;i++){
int best=max(query(1,sz,0,1,v[i]-1)+1,query(1,sz,0,v[i],v[i]));
modify(1,sz,0,v[i],v[i],best);
while(!qu.empty()&&i-qu.front().F>=d)qu.pop_front();
while(!qu.empty()&&qu.back().S>=v[i])qu.pop_back();
qu.push_back({i,v[i]});
modify(1,sz,0,1,qu.front().S-1,0);
}
cout<<query(1,sz,0,1,sz)<<"\n";
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... |