Less or Equal(思维)

You are given a sequence of integers of length n and integer number k. You should print any integer number x in the range of [1;109] (i.e. 1x109) such that exactly k elements of given sequence are less than or equal to x

.

Note that the sequence can contain equal elements.

If there is no such x

, print "-1" (without quotes).

Input

The first line of the input contains integer numbers n

and k ( 1n2105, 0kn). The second line of the input contains n integer numbers a1,a2,,an ( 1ai109

) — the sequence itself.

Output

Print any integer number x

from range [1;109] such that exactly k elements of given sequence is less or equal to x

.

If there is no such x

, print "-1" (without quotes).

Examples
Input
Copy
7 4
3 7 5 1 10 3 20
Output
Copy
6
Input
Copy
7 2
3 7 5 1 10 3 20
Output
Copy
-1
Note

In the first example 5

is also a valid answer because the elements with indices [1,3,4,6] is less than or equal to 5 and obviously less than or equal to 6

.

In the second example you cannot choose any number that only 2

elements of the given sequence will be less than or equal to this number because 3

elements of the given sequence will be also less than or equal to this number.

题意:一个含有n个元素的序列,求一个x(1<=x<=1e9)使得恰好有k个元素小于等于x

思路:先从小到大排序,求出第k大的元素arr[k-1],如果arr[k-1]=arr[k]说明不能找到这样的x,要注意当k=0时,x=arr[0]-1,当x<1时输出-1,要满足题目x的范围要求

#include<bits/stdc++.h>
using namespace std;
const int N = 2e5+10;
int arr[N];
int main(){
	int n,k;
	scanf("%d%d",&n,&k);
	for(int i=0;i<n;i++)
	   scanf("%d",&arr[i]);
	sort(arr,arr+n);
	if(k==0){
		int ans=arr[0]-1;
		if(ans<1) printf("-1\n");
		else printf("%d\n",ans);
	}
	else if(arr[k-1]==arr[k]) printf("-1\n");
	else printf("%d\n",arr[k-1]);
	return 0;
}


猜你喜欢

转载自blog.csdn.net/islittlehappy/article/details/80246123