제출 #1134069

#제출 시각아이디문제언어결과실행 시간메모리
1134069alexddRabbit Carrot (LMIO19_triusis)C++20
63 / 100
1099 ms97792 KiB
#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;
        for(int j=i-1;j>=0;j--)
        {
            if(a[j]-j*m >= a[i]-i*m)
            {
                dp[i] = min(dp[i], dp[j]-j);
            }
        }*/
        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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...