#include #include #include #include #include #include using namespace std; typedef long long ll; const int maxn = 2e5 + 10; int n, k; int arr[maxn]; multiset lower_values, greater_values; void insert_value(int x, ll& sum_lower, ll& sum_greater) { int max_lower_value = *lower_values.rbegin(); if(max_lower_value < x) { greater_values.insert(x); sum_greater += x; if(greater_values.size() > k / 2) { int smallest_greater = *greater_values.begin(); sum_greater -= smallest_greater; sum_lower -= smallest_greater; lower_values.insert(smallest_greater); greater_values.erase(greater_values.find(smallest_greater)); } } else { lower_values.insert(x); sum_lower -= x; if(lower_values.size() > (k + 1) / 2) { int max_in_lower = *lower_values.rbegin(); greater_values.insert(max_in_lower); lower_values.erase(lower_values.find(max_in_lower)); sum_lower += max_in_lower; sum_greater += max_in_lower; } } } void remove_element(int x, ll& sum_lower, ll& sum_greater) { if(greater_values.find(x) != greater_values.end()) { greater_values.erase(greater_values.find(x)); sum_greater -= x; } else if(lower_values.find(x) != lower_values.end()) { lower_values.erase(lower_values.find(x)); sum_lower += x; } if(lower_values.empty()) { int smallest_in_greater = *greater_values.begin(); lower_values.insert(smallest_in_greater); greater_values.erase(greater_values.find(smallest_in_greater)); sum_greater -= smallest_in_greater; sum_lower -= smallest_in_greater; } } int main() { ios_base::sync_with_stdio(false); cin >> n >> k; for(int i = 0; i < n; i++) { cin >> arr[i]; } ll sum_lower = -arr[0]; ll sum_greater = 0; lower_values.insert(arr[0]); for(int i = 1; i < k; i++) { insert_value(arr[i], sum_lower, sum_greater); } ll median = *lower_values.rbegin(); ll tmp = (ll) (lower_values.size()) * median + sum_lower; tmp += sum_greater - (ll) (greater_values.size()) * median; // cout << median << " "; cout << tmp << " "; for(int i = k; i < n; i++){ if(k > 1) { remove_element(arr[i - k], sum_lower, sum_greater); insert_value(arr[i], sum_lower, sum_greater); } else { insert_value(arr[i], sum_lower, sum_greater); remove_element(arr[i - 1], sum_lower, sum_greater); } median = *lower_values.rbegin(); tmp = (ll) (lower_values.size()) * median + sum_lower; tmp += sum_greater - (ll) (greater_values.size()) * median; cout << tmp << " " ; // cout << median << " "; } return 0; }