题目链接:传送门
m==1,只有一个区间,所以是数组中最小的。
m==2,这时候我们可以发现要分割为两个集合,所以我们直接判断左右就好了,a[0]和a[n-1]较大的一个。
m>=3,无论最大值在哪里,我们都能将它单独画为一个区间,所以就直接输出max,即可。
代码:
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define inf 0x3f3f3f3f
using namespace std;
int a[110000];
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
memset(a,0,sizeof(a));
int max_=-inf,xia,min_=inf;
for(int i=0; i<n; i++)
{
scanf("%d",&a[i]);
if(max_<a[i])
{
max_=a[i];
xia=i;
}
if(min_>a[i])
min_=a[i];
}
if(m>=3)
printf("%d\n",max_);
else if(m==1)
printf("%d\n",min_);
else
{
if(a[0]>a[n-1])
printf("%d\n",a[0]);
else printf("%d\n",a[n-1]);
}
}
return 0;
}