#include #define int long long using namespace std; constexpr int MAXN = 1e5 + 5; int n, k; int nums[MAXN], a[MAXN]; struct BinaryIndexedTree { int tr[MAXN]; void update(int p, int x) { while (p <= n) { tr[p] += x; p += p & -p; } } int query(int p) { int res = 0; while (p) { res += tr[p]; p -= p & -p; } return res; } } BIT, BIT2; signed main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); cin >> n >> k; for (int i = 1; i <= n; i++) { cin >> nums[i]; a[i] = nums[i]; } sort(nums + 1, nums + n + 1); int len = unique(nums + 1, nums + n + 1) - nums - 1; for (int i = 1; i <= n; i++) { a[i] = lower_bound(nums + 1, nums + len + 1, a[i]) - nums; } for (int i = 1; i <= k - 1; i++) { BIT.update(a[i], 1); BIT2.update(a[i], nums[a[i]]); } int ans = LLONG_MAX; for (int i = k; i <= n; i++) { BIT.update(a[i], 1); BIT2.update(a[i], nums[a[i]]); int p = (k + 1) / 2; int l = 1, r = len; while (l < r) { int mid = l + r >> 1; if (BIT.query(mid) >= p) r = mid; else l = mid + 1; } int cntl = BIT.query(l); int cntr = BIT.query(len) - BIT.query(l); int suml = BIT2.query(l); int sumr = BIT2.query(len) - BIT2.query(l); ans = min(ans, cntl * nums[l] - suml + sumr - cntr * nums[l]); BIT.update(a[i - k + 1], -1); BIT2.update(a[i - k + 1], -nums[a[i - k + 1]]); } cout << ans << '\n'; return 0; }