#include<bits/stdc++.h>
using namespace std;
int main()
{
int n, m;
cin >> n >> m;
int a[n];
for(int i = 0; i < n; i ++)
cin >> a[i];
vector<int> vec;
for(int i = 0; i < n; i ++)
vec.push_back(a[i]), vec.push_back(i * m);
sort(vec.begin(), vec.end());
vec.resize(unique(vec.begin(), vec.end()) - vec.begin());
for(int i = 0; i < n; i ++)
a[i] = lower_bound(vec.begin(), vec.end(), a[i]) - vec.begin();
const int inf = 1e9;
int dp[2][vec.size()];
for(int i = 0; i < vec.size(); i++)
dp[0][i] = inf;
dp[0][0] = 0;
for(int i = 0; i < n; i ++)
{
bool b = (i + 1) & 1, nb = i & 1;
int mi = inf, j = vec.size() - 1;
for(int k = vec.size() - 1; k >= 0; k--)
{
while(j >= 0 && vec[k] - vec[j] <= m) mi = min(mi, dp[nb][j]), j--;
dp[b][k] = mi + (k != a[i]);
}
}
int ans = n;
for(int i = 0; i < vec.size(); i ++)
ans = min(ans, dp[n % 2][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... |