Codeforce - 872 - B. Maximum of Maximums of Minimums 思路好题

Maximum of Maximums of Minimums

You are given an array a1, a2, ..., an consisting of n integers, and an integer k. You have to split the array into exactly k non-empty subsegments. You'll then compute the minimum integer on each subsegment, and take the maximum integer over the kobtained minimums. What is the maximum possible integer you can get?

Definitions of subsegment and array splitting are given in notes.

Input

The first line contains two integers n and k (1 ≤ k ≤ n ≤  105) — the size of the array a and the number of subsegments you have to split the array to.

The second line contains n integers a1,  a2,  ...,  an ( - 109  ≤  ai ≤  109).

Output

Print single integer — the maximum possible integer you can get if you split the array into k non-empty subsegments and take maximum of minimums on the subsegments.

Examples

Input

5 2
1 2 3 4 5

Output

5

Input

5 1
-4 -5 -3 -2 -1

Output

-5

Note

A subsegment [l,  r] (l ≤ r) of array a is the sequence al,  al + 1,  ...,  ar.

Splitting of array a of n elements into k subsegments [l1, r1], [l2, r2], ..., [lk, rk](l1 = 1, rk = nli = ri - 1 + 1 for all i > 1) is k sequences (al1, ..., ar1), ..., (alk, ..., ark).

In the first example you should split the array into subsegments [1, 4] and [5, 5]that results in sequences (1, 2, 3, 4) and (5). The minimums are min(1, 2, 3, 4) = 1 and min(5) = 5. The resulting maximum is max(1, 5) = 5. It is obvious that you can't reach greater result.

In the second example the only option you have is to split the array into one subsegment [1, 5], that results in one sequence ( - 4,  - 5,  - 3,  - 2,  - 1). The only minimum is min( - 4,  - 5,  - 3,  - 2,  - 1) =  - 5. The resulting maximum is  - 5.

思路:显然要得到最大值,那么我们让最大值单独成一份就好了。也就是说只要k≥3,我们总是令最大值单独成一份,其他随意分,就可以得到最大值,并且这个最大值就是它,如果k=2,那么结果就是max(array[0],array[n-1]),我们这样考虑,假设数组为,a1,a2,a3,a4,a5, 首先我们让a1为单独一份,a2~a5为一份,然后如果a2比a1大的话,显然不能和a1一组,因为这样可能会降低第二份的最小值,如果a2比a1小的话,也不能和a1一组,因为会降低第一组的最小值,反之a1~a4一组,a5一组,一样可以这样考虑,所以最后的最大值,就是max(array[0],array[n-1])

废话不多说直接上代码

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
int main() {
	int n,k,a[100000+5];
	cin>>n>>k;
	int maxx=-0x3f3f3f3f,minn=0x3f3f3f3f;
	for(int i=0;i<n;i++){
		cin>>a[i];
		maxx=max(a[i],maxx);
		minn=min(a[i],minn);
	} 
	if(k==1) cout<<minn<<endl;
	else if(k==2) cout<<max(a[0],a[n-1])<<endl;
	else cout<<maxx<<endl; 
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41199327/article/details/81124308