#P1006. F. 我是贪心大王

F. 我是贪心大王

F. 我是贪心大王

时间限制:1s

空间限制:256MB

题目描述

给定一个初始长度为 nn 的数组 a1,a2,...,ana_1,a_2, ..., a_n ,其中所有数都互不相同。

现在要对这个数组进行 kk 次操作,每次需要选择以下两种操作其中一个进行操作:

  • 从中取出数组中的 两个 最小值,并将其从数组中删去;
  • 从中取出数组中的 一个 最大值,并将其从数组中删去。

你需要计算经过 kk 次操作后,数组剩下的数的和的最大值是多少?

输入格式

第一行两个整数 nnkk ,分别代表初始数组长度和操作次数;

第二行 nn 个整数,代表数组中的元素,用空格隔开。

输出格式

输出一行整数,代表 kk 次操作剩余数和的最大值。

样例

5 2
2 5 1 10 6
11

解释

第一步先删去两个最小值 1,21, 2,第二步删去最大值 1010,剩余的数为 [5 6][5 \ 6],和为 1111;

可以证明,这样操作最后得到的数的和是最大的。

6 2
15 22 12 10 13 11
46

解释

两次都删去最大值后剩下的数为 [10,11,12,13][10,11,12,13],这样剩下的数的和是最大的,值为46.

数据范围

测试点编号 约定 测试点分值
121 \sim 2 k=1k = 1 每个测试点5分
3103 \sim 10 3n10003 \le n \le 1000
112011 \sim 20 无特殊约定

对于所有测试点,3n2105;1k99999;2k<n3 \le n \le 2*10^5; 1 \le k \le 99999; 2k < n;0ai1090 \le a_i \le 10^9.

对于 C/C++ 选手,这道题所有数的和加起来可能会超过 32位整数的范围 ,所以结果你需要使用 long long.