【洛谷 P1923】【深基9.例4】求第 k 小的数 题解(nth_element)

139 阅读1分钟

【深基9.例4】求第 k 小的数

题目描述

输入 n n n( 1 ≤ n < 5000000 1 \le n < 5000000 1≤n<5000000 且 n n n 为奇数)个数字 a i a_i ai​( 1 ≤ a i < 10 9 1 \le a_i < {10}^9 1≤ai​<109),输出这些数字的第 k k k 小的数。最小的数是第 0 0 0 小。

输入格式

输出格式

样例 #1

样例输入 #1

5 1
4 3 2 1 5

样例输出 #1

2

思路

用nth_element求第 k 小的数。

AC代码

#include <iostream>
#include <vector>
#include <algorithm>
#define AUTHOR "HEX9CF"
using namespace std;

vector<int> v;

void read(int &x)
{
    char ch;
    x = 0;
    while (('0' > ch || '9' < ch))
    {
        ch = getchar();
    }
    while (!('0' > ch || '9' < ch))
    {
        x = x * 10 + ch - '0';
        ch = getchar();
    }
}

int main()
{
    int n, k;
    read(n);
    read(k);
    for (int i = 0; i < n; i++)
    {
        int in;
        read(in);
        v.push_back(in);
    }
    nth_element(v.begin(), v.begin() + k, v.end());
    cout << v[k] << endl;
    return 0;
}