#include <bits/stdc++.h>
using namespace std;
vector<int>FT(200002,0);
void add(int i,int val){
    while(i<200002){
        FT[i]=max(FT[i],val);
        i+=i&-i;
    }
}
int get(int i){
    int s = 0;
    while(i){
        s=max(s,FT[i]);
        i-=i&-i;
    }
    return s;
}
int main(){
    ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    int n,d;
    cin>>n>>d;
    int a[n+1];
    for(int i=1;i<=n;i++)cin>>a[i];
    vector<int>val;
    for(int i=1;i<=n;i++)val.push_back(a[i]);
    sort(val.begin(),val.end());
    val.erase(unique(val.begin(),val.end()),val.end());
    for(int i=1;i<=n;i++)a[i]=lower_bound(val.begin(),val.end(),a[i])-val.begin()+1;
    int j=1;
    vector<int>dp(n+1,0);
    for(int i=1;i<=n;i++)dp[i]=1;
    int ans=0;
    for(int i=1;i<=n;i++){
        while(i-j>d&&j<i){
            add(a[j],dp[j]);
            j++;
        }
        dp[i]=get(a[i]-1)+1;
        ans=max(ans,dp[i]);
    }
    cout<<ans;
    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... |