题解:
1、给一个长度为n的序列,求序列中是否存在k个数刚好小于或等于某个数,如果存在则输出这个数
2、直接排序,然后输出第k个数 (总体思路)
3、由于序列中存在相同数,所以要判断第k+1和第k个数是否相等,如果相等则表示不可能存在刚好k个数小于或等于某个数
4、特判k=0和k=n的情况,k=n就很简单,直接输出最后一个数即可。k=0的话要判断第一个数是否为1,因为序列的值的范围
是1到1e9,如果第一个数就为1,那么就不存在某个数(范围1到1e9)都小于该序列
5、不存在的情况都输出-1
#include <bits/stdc++.h>
using namespace std;
const int maxn = 200000+10;
int se[maxn];
int main(){
int n,k;
cin >> n >> k;
for(int i=0;i<n;i++) cin >> se[i];
sort(se,se+n);
if(k == 0) {
if(se[0] == 1) cout << -1 << endl;
else cout << 1 << endl;
}
else if(k == n) cout << se[k-1] << endl;
else {
if(se[k] == se[k-1]) cout << -1 << endl;
else cout << se[k-1] << endl;
}
return 0;
}