#include using namespace std; using P = pair; int main() { int n, k; cin >> n >> k; vector a(n); for (int i = 0; i < n; ++i) cin >> a[i]; priority_queue

lower; priority_queue, greater

> upper; long long lower_sum = 0, upper_sum = 0; for (int i = 0; i < k; ++i) { upper.push(P(a[i], i)); upper_sum += a[i]; } while (lower.size() < upper.size()) { lower_sum += upper.top().first; upper_sum -= upper.top().first; lower.push(upper.top()); upper.pop(); } int lc = lower.size(); int uc = upper.size(); long long ans = 1e18; for (int i = k - 1; i < n; ++i) { if (i >= k) { if (P(a[i - k], i - k) > lower.top()) { --uc; upper_sum -= a[i - k]; } else { --lc; lower_sum -= a[i - k]; } P p = P(a[i], i); if (lower.top() > p) { ++lc; lower.push(p); lower_sum += a[i]; } else { ++uc; upper.push(p); upper_sum += a[i]; } while (lc > uc + 1) { if (lower.top().second <= i - k) { lower.pop(); continue; } upper_sum += lower.top().first; lower_sum -= lower.top().first; ++uc; upper.push(lower.top()); --lc; lower.pop(); } while (lc < uc) { if (upper.top().second <= i - k) { upper.pop(); continue; } lower_sum += upper.top().first; upper_sum -= upper.top().first; ++lc; lower.push(upper.top()); --uc; upper.pop(); } } while (lower.top().second <= i - k) { lower.pop(); } long long m = lower.top().first; ans = min(ans, m * lc - lower_sum + upper_sum - m * uc); // cout << m * lc - lower_sum + upper_sum - m * uc << "\n"; } cout << ans << "\n"; return 0; }