NC207028. 第k小数
描述
输入描述
多组输入,第一行读入一个整数T表示有T组数据。每组数据占两行,第一行为两个整数n,k,表示数列长度和k。第二行为n个用空格隔开的整数。
输出描述
对于每组数据,输出它的第k小数是多少。每组数据之间用空格隔开
示例1
输入:
2 5 2 1 4 2 3 4 3 3 3 2 1
输出:
2 3
C++(g++ 7.5.0) 解法, 执行用时: 2093ms, 内存消耗: 19756K, 提交时间: 2023-06-05 22:53:31
#include <bits/stdc++.h> using namespace std; using ll=long long; int t; const int N=5e6+10; int q[N],tmp[N]; int main() { cin>>t; while(t--){ int n,k; cin>>n>>k; for(int i=1;i<=n;i++) scanf("%d",&q[i]); nth_element(q+1,q+k,q+n+1); cout<<q[k]<<"\n"; } return 0; }
C++14(g++5.4) 解法, 执行用时: 2532ms, 内存消耗: 164128K, 提交时间: 2020-10-21 10:52:18
#include<bits/stdc++.h> using namespace std; int t,n,k,a[5000010]; int main() { scanf("%d",&t); while(t--) { scanf("%d%d",&n,&k); for(int i=0; i<n; i++)scanf("%d",&a[i]); nth_element(a,a+k-1,a+n); cout<<a[k-1]<<endl; } return 0; }
C++(clang++ 11.0.1) 解法, 执行用时: 2126ms, 内存消耗: 19612K, 提交时间: 2022-10-13 18:48:22
#include<bits/stdc++.h> using namespace std; const int mx=5e6+10; int a[mx]; int main(){ int t,n,k; cin>>t; while(t--){ cin>>n>>k; for(int i=0;i<n;i++){ scanf("%d",&a[i]); } nth_element(a,a+k-1,a+n); cout<<a[k-1]<<endl; } }