#include using namespace std; typedef long long ll; #define pii pair #define pll pair #define pdd pair #define X first #define Y second #define REP(i,a) for(int i=0;i0){ if(y%2) y-=1,t=t*x%mod; else y/=2,x=x*x%mod; } return t; } #ifdef DEBUG #define dprintf(fmt,...) fprintf(stderr,fmt,__VA_ARGS__) #else #define dprintf(fmt,...) #endif ll seg[N],cst[N]; void upd(int C,int S,int E,int s,int e,ll v){ if(s>E||e>1; upd(C*2,S,m,s,e,v); upd(C*2+1,m+1,E,s,e,v); } ll qu(int C,int S,int E,int s){ if(sE) return INF; //if(s==3)printf("%d %d %d %d %lld\n",C,S,E,s,seg[C]); if(S==E) return seg[C]; int m=(S+E)>>1; return min(seg[C],min(qu(C*2,S,m,s),qu(C*2+1,m+1,E,s))); } ll dp[N]; map M; int main(){ REP(i,N) dp[i]=INF; int n,k; scanf("%d%d",&n,&k); REP(i,n) scanf("%lld",&cst[i]); dp[0]=0; REP(i,n){ ll cs = dp[max(0,i-k)]+cst[i]; dp[min(i+1+k,n)]=min(cs,dp[min(i+1+k,n)]); } printf("%lld\n",dp[n]); // upd(1,0,n,0,0,0); // M[0]++; // REP(i,n){ // ll x = M.begin()->X+cst[i]; // upd(1,0,n,i+1,min(i+1+k,n),x); // // printf("gg%d %lld %lld\n",i+1,qu(1,0,n,i+1),x); // M[qu(1,0,n,i+1)]++; // if(i>=k){ // ll p = qu(1,0,n,i-k); // M[p]--; // if(M[p]==0) M.erase(p); // } // } // printf("%lld\n",qu(1,0,n,n)); return 0; }