#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize("O2")
#pragma GCC optimize("Ofast")
#pragma GCC target("avx,avx2,fma")
#define append push_back
#define int long long
const int N=2e5+10,LG=21;
int mod=998244353;
int a[N],dp[N];
int n,m;
int tree[N<<2];
int sz=0;
map<int,int>mp;
int get(int a,int b,int l=1,int r=sz,int s=1){
if(r<a or l>b) return 0;
if(a<=l and r<=b) return tree[s];
int m=(l+r)>>1;
return max(get(a,b,l,m,s*2),get(a,b,m+1,r,s*2+1));
}
void upd(int a,int b,int l=1,int r=sz,int s=1){
if(l>a or r<a) return;
if(l==r){
tree[s]=max(tree[s],b);
return;
}
int m=(l+r)>>1;
upd(a,b,l,m,s*2);
upd(a,b,m+1,r,s*2+1);
tree[s]=max(tree[s*2],tree[s*2+1]);
}
void solve(int tst){
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>a[i];
int mx=0;
vector<int>v;
for(int i=0;i<=n;i++){
v.append(a[i]);
v.append(a[i]-m);
}
sort(v.begin(),v.end());
sz=0;
for(int i=0;i<v.size();i++){
if(i==0 or v[i]!=v[i-1]) sz++;
mp[v[i]]=sz;
}
for(int i=1;i<=n;i++){
if(a[i]<=m*i){
dp[i]=get(mp[a[i]-m],sz)+1;
upd(mp[a[i]],dp[i]);
}
mx=max(mx,dp[i]);
}
cout<<n-mx<<endl;
}
signed main(){
ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int t = 1;
// cin >> t;
for(int i=1;i<=t;i++){
solve(i);
// if(i!=t) cout<<endl;
}
}
# | 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... |