P1923 求第 k 小的数求助(普及-)
  • 板块学术版
  • 楼主mmbbyy
  • 当前回复5
  • 已保存回复5
  • 发布时间2024/7/6 22:29
  • 上次更新2024/7/7 10:17:39
查看原帖
P1923 求第 k 小的数求助(普及-)
764553
mmbbyy楼主2024/7/6 22:29

本题由于数据范围要采用O(n)的算法,蒟蒻的代码如下:

#include<bits/stdc++.h>
using namespace std;
const int N=5e6+5;

int n,k,a[N];

int x[N],z[N],d[N];
int quick_sort(int l,int r){
    int xt=0,zt=0,dt=0;
    int flag=a[(r-l>>1)+l];
    for(int i=l;i<=r;i++){
        if(a[i]<flag)x[++xt]=a[i];
        else if(a[i]==flag)z[++zt]=a[i];
        else d[++dt]=a[i];
    }

    if(k+1<=l+xt-1){
        for(int i=1;i<=xt;i++)a[l+i-1]=x[i];
        quick_sort(l,l+xt-1);
    }

    else if(k+1<=l+xt+zt-1){
        for(int i=1;i<=zt;i++)a[l+xt+i-1]=z[i];
        return a[l+xt+zt-1];
    }


    else{
       for(int i=1;i<=dt;i++)a[l+xt+zt+i-1]=d[i];
       quick_sort(l+xt+zt,r);
    }
}

int main(){
    scanf("%d%d",&n,&k);
    for(int i=1;i<=n;i++)scanf("%d",&a[i]);
    printf("%d",quick_sort(1,n));
    return 0;
}

然而结果如下
https://www.luogu.com.cn/record/164343018

求助大佬!本蒟蒻实在看不出来了!!

2024/7/6 22:29
加载中...