P1923居然O(N)过不了

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

yyc_qwq @ 2022-12-25 17:26:27

#include<iostream>
#include<math.h>
using namespace std;

int a[5000005],n,k;

void sort(int l,int r){
    int i = l,j = r,mid = a[(l+r)/2];
    do{
        while(a[j] > mid) j--;
        while(a[i] < mid) i++;
        if(i<=j){
            swap(a[i],a[j]);
            i++,j--;
        }
    }while(i <= j);
    if(k <= j) sort(l,j);
    else if(i <= k) sort(i,r);
    else {
        cout << a[j+1] << endl;
        exit(0);
    }
}

int main(){
    cin >> n >> k;
    for(int i=0;i<n;i++) cin >> a[i];
    sort(0,n-1);
    return 0;
}

by RP_INT_MAX @ 2022-12-25 17:28:53

@yangyuecong 加这句话。

    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);

by RP_INT_MAX @ 2022-12-25 17:29:32

@yangyuecong 或者干脆把 cin/cout 换掉,您的输入太慢了。


by Asimplename @ 2022-12-25 17:46:31

这是O(n)


by Terrible @ 2022-12-25 17:50:09

请用 BFPRT 算法保证你的程序复杂度不会退化。

一般来说,这个分治是期望 O(n),但并不是严格 O(n)


by yyc_qwq @ 2022-12-25 19:30:43

谢谢(AC了)


|