#include<bits/stdc++.h>
using namespace std;
#define int long long
const int INF = 1e10;
int n,m;
int a[200005],dp[200005];
unordered_map<int,int> aib;
int maxval=3*INF;
int qry(int poz)
{
poz+=INF;
int aux=INF;
for(int i=poz;i<=maxval;i+=(i&(-i)))
aux=min(aux,aib[i]);
return aux+INF;
}
void upd(int poz, int newv)
{
poz+=INF;
newv-=INF;
for(int i=poz;i>0;i-=(i&(-i)))
aib[i]=min(aib[i],newv);
}
signed main()
{
ios_base::sync_with_stdio(0);cin.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>a[i];
n++;
a[n]=0;
upd(0,0);
for(int i=1;i<=n;i++)
{
dp[i]=INF;
if(a[i]-i*m > 0)
continue;
dp[i] = qry(a[i]-i*m);
dp[i]+=i-1;
upd(a[i]-i*m, dp[i]-i);
}
cout<<dp[n];
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... |