哪位仁兄来帮我一下

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

2115lhx @ 2023-02-07 12:55:38

最后一个数据总是超时

#include<iostream>
using namespace std;
int m,k;
int a[5000002];
void sort(int l,int r) {
    int 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(k<=j)sort(l,j);
    else if(k>=i)sort(i,r);
    else return ;
}
int main() {
    cin>>m>>k;
    for(int i=0; i<m; i++)
        cin>>a[i];
    sort(0,m-1);
    cout<<a[k];
    return 0;
}

by lyxleo @ 2023-02-07 12:57:59

加个读入优化就过了


by RP_INT_MAX @ 2023-02-07 13:01:30

@2115lhx 乐。cin 勇士。


by RP_INT_MAX @ 2023-02-07 13:02:28

建议用 scanf,或者加上这两行:

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

by 2115lhx @ 2023-02-07 13:07:27

@RP_INT_MAX 只有cin会超时吗?scanf是不是几乎不会超时?


by zgy_123 @ 2023-02-07 13:09:03

@2115lhx 比如scanf5e7的数据就会T


by RP_INT_MAX @ 2023-02-07 13:10:52

楼上正解。


by 2115lhx @ 2023-02-07 13:12:01

@Gavin2011 明白了,谢谢


|