#include using namespace std; long long solve_odd(int N, int K, const vector & As){ int w = K / 2; vector Bs(As.begin(), As.begin() + K); sort(Bs.begin(), Bs.end()); long long med = Bs[w]; multiset Ls(Bs.begin(), Bs.begin() + w); multiset Rs(Bs.begin() + w + 1, Bs.end()); long long cost = 0; for (auto b : Bs) cost += abs(b - med); long long best = cost; for (int i = K; i < N; ++i){ long long vin = As[i]; long long vout = As[i - K]; if (med < vin and med < vout){ Rs.insert(vin); auto it = Rs.find(vout); Rs.erase(it); cost += vin - vout; }else if (vin <= med and vout <= med){ Ls.insert(vin); auto it = Ls.find(vout); Ls.erase(it); cost += vout - vin; }else if (vin <= med and med < vout){ Rs.insert(med); auto it = Rs.find(vout); Rs.erase(it); cost += med - vout; med = *Ls.rbegin(); Ls.insert(vin); it = Ls.find(med); Ls.erase(it); cost += med - vin; }else if (med < vin and vout <= med){ Ls.insert(med); auto it = Ls.find(vout); Ls.erase(it); cost += vout - med; med = *Rs.begin(); Rs.insert(vin); it = Rs.find(med); Rs.erase(it); cost += vin - med; } best = min(best, cost); } return best; } long long solve_even(int N, int K, const vector & As){ int w = K / 2; vector Bs(As.begin(), As.begin() + K); sort(Bs.begin(), Bs.end()); long long medL = Bs[w - 1]; long long medR = Bs[w]; long long med = (medL + medR) / 2LL; multiset Ls(Bs.begin(), Bs.begin() + w); multiset Rs(Bs.begin() + w, Bs.end()); long long cost = 0; for (auto b : Bs) cost += abs(b - med); long long best = cost; for (int i = K; i < N; ++i){ long long vin = As[i]; long long vout = As[i - K]; if (medL < vin and medR <= vout){ Rs.insert(vin); auto it = Rs.find(vout); Rs.erase(it); cost += vin - vout; }else if (vin <= medR and vout <= medL){ Ls.insert(vin); auto it = Ls.find(vout); assert(it != Ls.end()); Ls.erase(it); cost += vout - vin; }else if (vin <= medR and medR <= vout){ Rs.insert(medL); auto it = Rs.find(vout); Rs.erase(it); cost += medL - vout; Ls.insert(vin); it = Ls.find(medL); Ls.erase(it); cost += medL - vin; }else if (medL < vin and vout <= medL){ Ls.insert(medR); auto it = Ls.find(vout); Ls.erase(it); cost += vout - medR; Rs.insert(vin); it = Rs.find(medR); Rs.erase(it); cost += vin - medR; } best = min(best, cost); medL = *Ls.rbegin(); medR = *Rs.begin(); } return best; } long long solve(int N, int K, const vector & As){ if (K % 2 == 1){ return solve_odd(N, K, As); }else{ return solve_even(N, K, As); } } int main(){ cin.tie(0); ios::sync_with_stdio(false); int N, K; cin >> N >> K; vector As(N, 0); for (auto & a : As) cin >> a; cout << solve(N, K, As) << endl; return 0; }