#include <bits/stdc++.h>
using namespace std;
// #define int long long
signed main()
{
int n,R;
cin>>n>>R;
int a[n];
set<int> se;
for (int i=0;i<n;i++)
{
cin>>a[i];
se.insert(a[i]),se.insert(a[i]+R);
if (a[i]>=R) se.insert(a[i]-R);
}
se.insert(R);
vector<int> v;
for (int i:se)
v.push_back(i);
int m=v.size();
int dp[n][m],l[m];
for (int i=0;i<n;i++)
for (int j=0;j<m;j++)
dp[i][j]=n+1;
for (int i=0;i<m;i++)
for (int j=i;j>=0;j--)
if (v[i]-v[j]<=R)
l[i]=j;
int x=lower_bound(v.begin(),v.end(),R)-begin(v),y=lower_bound(v.begin(),v.end(),a[0])-begin(v);
// for (int i:v)
// cout<<i<<' ';
// cout<<endl;
dp[0][x]=1;
if (a[0]<=R)
dp[0][y]=0;
for (int i=1;i<n;i++)
{
int suf[m];suf[m-1]=dp[i-1][m-1];
for (int j=m-2;j>=0;j--)
suf[j]=min(suf[j+1],dp[i-1][j]);
for (int j=0;j<m;j++)
dp[i][j]=suf[l[j]]+(a[i]!=v[j]);
}
// for (int i=0;i<n;i++)
// {
// for (int j=0;j<m;j++)
// cout<<dp[i][j]<<' ';
// cout<<endl;
// }
int ans=dp[n-1][0];
for (int i=1;i<m;i++)
ans=min(ans,dp[n-1][i]);
cout<<ans<<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... |