Submission #1164768

#TimeUsernameProblemLanguageResultExecution timeMemory
1164768MuhammadSaramRabbit Carrot (LMIO19_triusis)C++20
0 / 100
299 ms327680 KiB
#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),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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...