Maximum Sum
Contest: Educational Codeforces Round 148 (Rated for Div. 2)
Difficulty rating: 1100
Tags: brute force, sortings, two pointers

You are given an array $$$a_1, a_2, \dots, a_n$$$, where all elements are different.

You have to perform exactly $$$k$$$ operations with it. During each operation, you do exactly one of the following two actions (you choose which to do yourself):

- find two minimum elements in the array, and delete them;
- find the maximum element in the array, and delete it.

You have to calculate the maximum possible sum of elements in the resulting array.

Input format:
The first line contains one integer $$$t$$$ ($$$1 \le t \le 10^4$$$) — the number of test cases.

Each test case consists of two lines:

- the first line contains two integers $$$n$$$ and $$$k$$$ ($$$3 \le n \le 2 \cdot 10^5$$$; $$$1 \le k \le 99999$$$; $$$2k < n$$$) — the number of elements and operations, respectively.
- the second line contains $$$n$$$ integers $$$a_1, a_2, \dots, a_n$$$ ($$$1 \le a_i \le 10^9$$$; all $$$a_i$$$ are different) — the elements of the array.

Additional constraint on the input: the sum of $$$n$$$ does not exceed $$$2 \cdot 10^5$$$.

Output format:
For each test case, print one integer — the maximum possible sum of elements in the resulting array.

Constraints:
Time limit: 2.0 s
Memory limit: 256.0 MB

Note:
In the first testcase, applying the first operation produces the following outcome:

- two minimums are $$$1$$$ and $$$2$$$; removing them leaves the array as $$$[5, 10, 6]$$$, with sum $$$21$$$;
- a maximum is $$$10$$$; removing it leaves the array as $$$[2, 5, 1, 6]$$$, with sum $$$14$$$.

$$$21$$$ is the best answer.

In the second testcase, it's optimal to first erase two minimums, then a maximum.

Example input:
6
5 1
2 5 1 10 6
5 2
2 5 1 10 6
3 1
1 2 3
6 1
15 22 12 10 13 11
6 2
15 22 12 10 13 11
5 1
999999996 999999999 999999997 999999998 999999995

Example output:
21
11
3
62
46
3999999986

Editorial:
The first instinct is to implement a greedy solution which removes either two minimums or one maximum, according to which of the options removes elements with smaller sum. Unfortunately, this doesn't work even on the examples (hint to the participants of the round: if your solution gives a different answer on the examples, most probably you should try to find an error in your solution, not send messages to the author that their answers are definitely wrong).
Okay, we need something other. Let's notice that the order of operations does not matter: deleting two minimums and then maximum is the same as choosing the other way around. So, we can iterate on the number of operations $$$m$$$ when we remove the two minimums; then the resulting array is the array $$$a$$$ from which we removed $$$2m$$$ minimums and $$$(k-m)$$$ maximums.
How to quickly calculate the sum of remaining elements? First of all, sorting the original array $$$a$$$ won't hurt, since the minimums then will always be in the beginning of the array, and the maximums will be in the end. After the array $$$a$$$ is sorted, every operation either deletes two leftmost elements, or one rightmost element. So, if we remove $$$2m$$$ minimums and $$$(k-m)$$$ maximums, the elements that remain form the segment from the position $$$(2m+1)$$$ to the position $$$(n-(k-m))$$$ in the sorted array; and the sum on it can be computed in $$$O(1)$$$ with prefix sums.
Time complexity: $$$O(n \log n)$$$.