// O(N K log K) #include using namespace std; int64_t solve(const int n, const int k, const vector &A) { int64_t ans = 1e18; int l = (k + 1) / 2; // n 回ループ for (int i = 0; i < n; i++) { if (i >= k - 1) { // priority_queue を使って中央値を求める // O(k log k) // O(k) で中央値を求める方法も存在するが、割愛 priority_queue pq; for (int j = 0; j < k; j++) { pq.emplace(A[i-j]); if ((int) pq.size() > l) { // 大きい値を捨てる pq.pop(); } } int median = pq.top(); // 中央値との差の和を全て足す // O(k) int64_t cand = 0; for (int j = 0; j < k; j++) { cand += abs(median - A[i-j]); } //cout << i << ": (" << median << ", " << cand << ")" << endl; ans = min(ans, cand); } } return ans; } int main() { cin.tie(nullptr); ios::sync_with_stdio(false); int n, k; cin >> n >> k; vector A(n); for (int i = 0; i < n; i++) cin >> A[i]; cout << solve(n, k, A) << endl; return 0; }