题目
You are given a sequence of integers of length
n
and integer number
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
Output
Print any integer number
x
from range
If there is no such x , print “-1” (without quotes).
Examples
Input |
---|
7 4 3 7 5 1 10 3 20 |
Output |
6 |
Input |
---|
7 2 3 7 5 1 10 3 20 |
Output |
-1 |
Note
In the first example 5 is also a valid answer because the elements with indices
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,109]
- 恰好有
k
个数小于等于
x
【思路】
维护一个“比
x
小的数的集合”,不断加入更大的数并更新
【注意】
需要特判
k
为
代码
#include<stdio.h>
#include<algorithm>
using std::sort;
#define N_max 200005
int arr[N_max];
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);
//循环的边界
arr[n] = 1000000001;
//cur之前的数已经加入集合
int cur = 0;
//特判k==0
if (k == 0) {
if (arr[0] <= 1) printf("-1");
else printf("%d",arr[0]-1); return 0;
}
//加入第一个数以及所有与它相等的数
while (arr[cur] == arr[cur + 1])
cur ++;
for ( ;;) {
if (cur + 1 == k){printf("%d", arr[cur+1]-1);break;}
if (cur + 1 > k) {printf("-1"); return 0;}
//覆盖到下一个连续段的末尾
cur++;
while (arr[cur] == arr[cur + 1])
cur ++;
}
}