#P1005. E. 我是贪心小王

E. 我是贪心小王

E. 我是贪心小王

时间限制:1s

空间限制:256MB

题目描述

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

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

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

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

输入格式

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

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

输出格式

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

样例

5 3
4 1 2 8 3
12

解释

删去 1,2,31,2,3 后剩下的数的和最大,值为 4+8=124 + 8 = 12.

数据范围

对于 50%50\% 的数据:1k<n10001 \le k < n \le 1000;

对于 100%100\% 的数据:1k<n21051 \le k < n \le 2*10^5,0ai1090 \le a_i \le 10^9.

提示

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

另外,在这题中,你可能需要进行排序,可以使用C++自带的sort函数,以下是一个示例用法:

#include <iostream>
#include <algorithm> // 使用sort函数需要导入该头文件

using namespace std;

int main()
{
	int a[] = {4, 1, 2, 8, 3};
	int n = 5;

	sort(a, a+n);
	// 第一个参数代表要排序的第一个数的位置
    // 第二个参数代表要排序的最后一个数的下一个位置
  
    for(int i=0; i<n; i++)
        cout << a[i] << " ";
    // 结果为1 2 3 4 8
}