1wa ,2tle,快排求助 qwq

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

tbzedq3j @ 2021-07-08 21:48:47

#include <bits/stdc++.h>
using namespace std;
long long a[5000010];
long long i, j, n, k, mid;
void swap(long long& sa, long long& sb){
    int sc = sa;
    sa = sb;
    sb = sc;
}
void qusort(long long l, long long r){
    i = l;
    j = r;
    mid = a[(l + r) / 2];
    while(i <= j){
        while(a[i] < mid)  i++;
        while(a[j] > mid)  j--;
        if(i <= j){
            swap(a[i], a[j]);
            i++;
            j--;
        }
    }
    if(l < j)  qusort(l, j);
    if(i < r)  qusort(i, r);
    return;
}
int main(){
    cin >> n >> k;
    for(long long i=1;i<=n;i++)
        cin >> a[i];
    qusort(1, n);
    cout << a[k - 1];
    return 0;
}

by 被独宠的教徒 @ 2021-07-08 21:51:09

头像好评


by 雨伞CKY @ 2021-07-08 22:11:46

快排的时间复杂度是 O(n\log _{2}n),因为 n\lt 5000000,所以会 TLE。本题应该使用分治算法,从而优化时间复杂度至 O(n)


by 雨伞CKY @ 2021-07-08 22:49:59

其实这题使用快速读入和sort也可以过。


by tbzedq3j @ 2021-09-13 18:23:03

@雨伞CKY 谢谢dalao指教 QWQ


|