时间限制:1秒 内存限制:128M
题目描述
将有一个包含n个数字的数组a,分成k个非空的子段,从每个子段中拿出对应的最小值Min_x,再从所有的最小值中拿出最大值Max,请问Max最大能是多少?
输入描述
输入第一行包含n和k,1≤k≤n≤10^5 1≤k≤n≤10^5
输入第二行包含对应的n个数字a[i],-10^9≤a[i]≤10^9 −10^9≤ai≤10^9
输出描述
输出Max最大可以到达的值。
输入样例
5 2
1 2 3 4 5
输出样例
5
提示
样例可以拆分为:[1,4]和[5,5],第一段最小值为1,第二段为5,因此输出5。
这道题我们不难看出让我们求的是min中的max
并且分成k段的前提下还要是max最大
真的需要这么麻烦吗???
YES!
我们其实从提示中就可以看出
将数组中的最大值单独一组,再将剩下的元素分成k-1组即可实现max最大化
具体推导过程就不过多赘述了(懒得写)
这题没有太多条件
所以直接用max函数即可
所以——
香喷喷的AC代码来喽!
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,k,a[100005],maxx=0;
cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>a[i];
maxx=max(maxx,a[i]);
}
cout<<maxx;
return 0;
}
由于这题代码量较少
所以就不写注释了(也用不着啊喂)
好了
这就是“最大? 最小?”的呆妈编写