为什么快选还超时啊

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

FanZhiyu1 @ 2024-08-30 17:28:04

#include<bits/stdc++.h>
using namespace std;
const int N=5e6+5;
int q[N];
int qchoose(int l,int r,int k){
    if(l>=r) return q[l];
    int i=l,j=r,flag=q[(l+r)/2];
    do{
        while(q[i]<flag) i++;
        while(q[j]>flag) j--;
        if(i<=j){
            swap(q[i],q[j]);
            i++;
            j--;
        }
    }while(i<=j);
    int sl=j-l+1;
    if(k<=sl) return qchoose(l,j,k);
    else return qchoose(j+1,r,k-sl);
}
int main()
{
    int n,k;
    cin>>n>>k;
    for(int i=0;i<n;i++) cin>>q[i];
    cout<<qchoose(0,n-1,k+1);
    return 0;
}

by DANNNqwq @ 2024-08-30 17:30:31

你flag随机找试试


by sea_of_answers @ 2024-08-30 18:03:08

@FanZhiyu1 本题在于输入输出,可以使用scanf/printf输入输出,其他可以正常求。


|