#include using namespace std; typedef long long ll; #define int ll const int inf = 1e18; const int N = 5e5 + 7; int n, k, a[N], res; int val1 = 0, val2 = 0; multiset q1, q2; inline void add(int x) { if (q2.size() == 0) q1.insert(x), val1 += x; else { int tmp = *q2.begin(); if (x >= tmp) q2.insert(x), val2 += x; else q1.insert(x), val1 += x; } while (q1.size() > q2.size() + 1) { auto it = prev(q1.end()); int tmp = *it; q1.erase(it), q2.insert(tmp); val1 -= tmp, val2 += tmp; } while (q1.size() < q2.size()) { auto it = q2.begin(); int tmp = *it; q2.erase(it), q1.insert(tmp); val2 -= tmp, val1 += tmp; } } inline void del(int x) { if (q2.find(x) != q2.end()) q2.erase(q2.find(x)), val2 -= x; else q1.erase(q1.find(x)), val1 -= x; while (q1.size() > q2.size() + 1) { auto it = prev(q1.end()); int tmp = *it; q1.erase(it), q2.insert(tmp); val1 -= tmp, val2 += tmp; } while (q1.size() < q2.size()) { auto it = q2.begin(); int tmp = *it; q2.erase(it), q1.insert(tmp); val2 -= tmp, val1 += tmp; } } signed main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> k; for (int i = 1; i <= n; i++) cin >> a[i]; for (int i = 1; i <= k; i++) add(a[i]); int val = *(q1.rbegin()); res = val2 - val1 + (q1.size() - q2.size()) * val; for (int i = k + 1; i <= n; i++) { del(a[i - k]), add(a[i]); val = *(q1.rbegin()); res = min(res, ll(val2 - val1 + (q1.size() - q2.size()) * val)); } cout << res; }