求助大佬 为什么第三个测试点过不了???

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

czy189 @ 2024-06-16 23:11:33

#include<iostream>
using namespace std;

const int N = 5000010;
int k,n,a[N];

void Q_sort(int l, int r)
{
    if(l>=r) return;

    int i = l - 1,j = r + 1, x = a[l + r >> 1];
    while(i < j)
    {
        do i++; while(a[i] < x);
        do j--; while(a[j] > x);
        if(i < j) swap(a[i],a[j]);  
    }   
    if(k < j) Q_sort(l,j);
    else if(k > j + 1) Q_sort(j+1, r);
    else 
{
cout<<a[k];
return;
}
}
int main()
{
    cin>>n>>k;
    for(int i = 0;i < n; ++i) scanf("%d",&a[i]);
    Q_sort(0,n-1);

    return 0;
}

by blue_peace @ 2024-06-16 23:54:17

最终还是写普通quicksort吧。

AC代码:

#include<iostream>
using namespace std;

const int N = 5000010;
int k,n,a[N];

void Q_sort(int l, int r)
{
    if(l>=r) return;

    int i = l - 1,j = r + 1, x = a[l + r >> 1];
    while(i < j)
    {
        do i++; while(a[i] < x);
        do j--; while(a[j] > x);
        if(i < j) swap(a[i],a[j]);  
    }   
    Q_sort(l,j);
    Q_sort(j+1, r);
}
int main()
{
    cin>>n>>k;
    for(int i = 0;i < n; ++i) scanf("%d",&a[i]);
    Q_sort(0,n-1);
    cout << a[k];
    return 0;
}

by czy189 @ 2024-06-17 01:34:46

普通要开o2 不然要超 想了很久也没想出来为什么第三个点过不去 @blue_peace


|