Problem p03161 (C++)

Buggy submission (status: Runtime Error):
#include <bits/stdc++.h>
#define fastio                                                                 \
  ios_base::sync_with_stdio(false);                                            \
  cin.tie(NULL);                                                               \
  cout.tie(NULL);
#define lli long long int
#define ulli unsigned long long int
#define ff first
#define ss second
#define mp make_pair
#define pb push_back
#define lb lower_bound
#define ub upper_bound
#define bs binary_search
#define loopl(i, a, b) for (lli i = a; i < b; i++)
#define loop(i, a, b) for (int i = a; i < b; i++)
#define mod 1000000007
#define inf 1000000000000000
#define lld long double
#define pll pair<long long int, long long int>
#define vpll vector<pll>
#define vll vector<lli>
#define eps 0.000001
#define endl '\n'

using namespace std;

#define MAXN 10000000
// lli spf[MAXN];
// void sieve();
// set<lli> factors(lli x);
// lli power(lli x,lli y,lli p);

// void getZarr(string str, lli Z[]);

int main() {
  /////////////////////////////////////

  fastio;
#ifndef ONLINE_JUDGE
  freopen("input.txt", "rt", stdin);
  freopen("output.txt", "wt", stdout);
#endif

  /////////////////////////////////////

  lli n, k;
  cin >> n >> k;

  lli a[n];
  loopl(i, 0, n) cin >> a[i];

  lli dp[n];
  dp[0] = 0;
  dp[1] = abs(a[1] - a[0]);

  loopl(i, 2, n) {
    lli mini = inf;

    loopl(j, max((lli)0, i - k), i) mini = min(mini, dp[j] + abs(a[i] - a[j]));

    dp[i] = mini;
  }

  cout << dp[n - 1] << endl;
}

/*   void sieve()
   {
       spf[1] = 1;
       loopl(i,2,MAXN)
           spf[i] = i;
       for (lli i=4; i<MAXN; i+=2)
           spf[i] = 2;

       for (lli i=3; i*i<MAXN; i++) {
           if (spf[i] == i) {
               for (lli j=i*i; j<MAXN; j+=i)
                   if (spf[j]==j)
                       spf[j] = i;
           }
       }

   }*/
/*
multiset<lli> factors(lli x)
{
    multiset<lli> pr;
    while (x != 1)
    {
        pr.insert(spf[x]);
        x = x / spf[x];
    }
    return pr;
}

*/

/*
void dfs(lli q,lli root)
{
    vis[q]=1;

    ans[q]=1;
    for(auto x: v[q])
    {
        if(!vis[x])
        {
            if(a[x]==a[root] && x<root) continue;
            if(a[x]<a[root] || a[x]>a[root]+d) continue;
            dfs(x,root);
            ans[q]=(ans[q]*((ans[x]+1)%mod))%mod ;
        }
    }

}
*/

/*void getZarr(string str, lli Z[])
{
    lli n = str.length();
    lli L, R, k;
    L = R = 0;
    for (lli i = 1; i < n; ++i){
        if (i > R){
            L = R = i;
            while (R<n && str[R-L] == str[R])
                R++;
            Z[i] = R-L;
            R--;
        } else {
            k = i-L;
            if (Z[k] < R-i+1)
                Z[i] = Z[k];
            else {
                L = i;
                while (R<n && str[R-L] == str[R])
                    R++;
                Z[i] = R-L;
                R--;
            }
        }
    }
}

*/

/*  lli power(lli x, lli y, lli p)
  {
      lli res = 1;
      x = x % p;
      while (y > 0)
      {
          if (y & 1)
              res = (res*x) % p;

          y = y>>1;
          x = (x*x) % p;
      }
      return res;
  }
  */


Fixed submission:
#include <bits/stdc++.h>
#define fastio                                                                 \
  ios_base::sync_with_stdio(false);                                            \
  cin.tie(NULL);                                                               \
  cout.tie(NULL);
#define lli long long int
#define ulli unsigned long long int
#define ff first
#define ss second
#define mp make_pair
#define pb push_back
#define lb lower_bound
#define ub upper_bound
#define bs binary_search
#define loopl(i, a, b) for (lli i = a; i < b; i++)
#define loop(i, a, b) for (int i = a; i < b; i++)
#define mod 1000000007
#define inf 1000000000000000
#define lld long double
#define pll pair<long long int, long long int>
#define vpll vector<pll>
#define vll vector<lli>
#define eps 0.000001
#define endl '\n'

using namespace std;

#define MAXN 10000000
// lli spf[MAXN];
// void sieve();
// set<lli> factors(lli x);
// lli power(lli x,lli y,lli p);

// void getZarr(string str, lli Z[]);

int main() {
  lli n, k;
  cin >> n >> k;

  lli a[n];
  loopl(i, 0, n) cin >> a[i];

  lli dp[n];
  dp[0] = 0;
  dp[1] = abs(a[1] - a[0]);

  loopl(i, 2, n) {
    lli mini = inf;

    loopl(j, max((lli)0, i - k), i) mini = min(mini, dp[j] + abs(a[i] - a[j]));

    dp[i] = mini;
  }

  cout << dp[n - 1] << endl;
}

/*   void sieve()
   {
       spf[1] = 1;
       loopl(i,2,MAXN)
           spf[i] = i;
       for (lli i=4; i<MAXN; i+=2)
           spf[i] = 2;

       for (lli i=3; i*i<MAXN; i++) {
           if (spf[i] == i) {
               for (lli j=i*i; j<MAXN; j+=i)
                   if (spf[j]==j)
                       spf[j] = i;
           }
       }

   }*/
/*
multiset<lli> factors(lli x)
{
    multiset<lli> pr;
    while (x != 1)
    {
        pr.insert(spf[x]);
        x = x / spf[x];
    }
    return pr;
}

*/

/*
void dfs(lli q,lli root)
{
    vis[q]=1;

    ans[q]=1;
    for(auto x: v[q])
    {
        if(!vis[x])
        {
            if(a[x]==a[root] && x<root) continue;
            if(a[x]<a[root] || a[x]>a[root]+d) continue;
            dfs(x,root);
            ans[q]=(ans[q]*((ans[x]+1)%mod))%mod ;
        }
    }

}
*/

/*void getZarr(string str, lli Z[])
{
    lli n = str.length();
    lli L, R, k;
    L = R = 0;
    for (lli i = 1; i < n; ++i){
        if (i > R){
            L = R = i;
            while (R<n && str[R-L] == str[R])
                R++;
            Z[i] = R-L;
            R--;
        } else {
            k = i-L;
            if (Z[k] < R-i+1)
                Z[i] = Z[k];
            else {
                L = i;
                while (R<n && str[R-L] == str[R])
                    R++;
                Z[i] = R-L;
                R--;
            }
        }
    }
}

*/

/*  lli power(lli x, lli y, lli p)
  {
      lli res = 1;
      x = x % p;
      while (y > 0)
      {
          if (y & 1)
              res = (res*x) % p;

          y = y>>1;
          x = (x*x) % p;
      }
      return res;
  }
  */