题解
题目描述
链接:https://ac.nowcoder.com/acm/contest/5773/A
给你一个长度为n的序列,求序列中第k小数的多少。
input:
多组输入,第一行读入一个整数T表示有T组数据。
每组数据占两行,第一行为两个整数n,k,表示数列长度和k。
第二行为n个用空格隔开的整数。
output:
对于每组数据,输出它的第k小数是多少。
每组数据之间用空格隔开
解题思路
采用快排的思想,我们先找一个基准,把比这个基准小的数放基准左边,比这个基准大的数放在基准右边,这个时候如果基准位置左边的数的个数要比k大,那么我们要找的第k小的数,说明这个第k小的数一定在左边,如果小则一定在右边,如果等于那基准位置这个数就是答案,这样我们每次都能省去一些数不用判断,减少时间复杂度。
ps:数据比较大,为了不被卡时间,采用了快读来输入数据。
代码如下
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a[5000000];
inline ll read()//快读
{
ll x=0,f=1;
char ch=getchar();
while(ch<'0'||ch