求助为什么用scanf时最后两个不会tle,而快排次cincout tle了
查看原帖
求助为什么用scanf时最后两个不会tle,而快排次cincout tle了
1155616
TGXZZ楼主2024/3/30 20:00
#include <cstdio>
#include <algorithm>

const int N = 5e6 + 10;
int q[N];
void quick_sort(int q[], long long l, long long r)
{
    if (l >= r) return;
    int i = l - 1, j = r + 1, x = q[l + r >> 1];
    while(i < j)
    {
        do i ++; while(q[i] < x);
        do j --; while(q[j] > x);
        if (i < j){
            int c = q[i];
                q[i] = q[j];
                q[j] = c;
        }
    }
    quick_sort(q, l, j);
    quick_sort(q, j + 1, r);
}
int main()
{
    long long n, m;
    scanf("%lld %lld", &n, &m);

    for (long long i = 0; i < n; i ++) scanf("%lld", &q[i]);

    quick_sort(q, 0, n - 1);

    printf("%lld ", q[m]);
    
    return 0;
}
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 5e6 + 10;
int q[N];
void quick_sort(int q[], long long l, long long r)
{
    if (l >= r) return ;
    int i = l - 1, j = r + 1, x = q[l + r >> 1];
    while(i < j)
    {
        do i ++; while(q[i] < x);
        do j --; while(q[j] > x);
        if (i < j) swap(q[i], q[j]);
    }
    quick_sort(q, l, j);
    quick_sort(q, j + 1, r);
}
int main()
{
    long long n, m;
    cin >> n >> m;

    for (long long i = 0; i < n; i ++) cin >> q[i];

    quick_sort(q, 0, n - 1);

    cout << q[m] << '\n';

    return 0;
}
2024/3/30 20:00
加载中...