40分一个超时两个红,求助!!!

P1908 逆序对

Florian18 @ 2023-11-23 23:12:08

#include<bits/stdc++.h>
#define rep(i,m,n) for(int i=(m);i<=(n);i++)
using namespace std;

long long n=0,a[100000]={0};

void qs(int l,int r)
{
    int lt=l,rt=r,mid=a[l+r>>1];
    while(lt<=rt)
    {
        while(a[lt]<mid) lt++;
        while(a[rt]>mid) rt--; 
        if(lt<=rt)
        {
            swap(a[lt],a[rt]);
            lt++,rt--;
        }
    }
    if(l<rt)qs(l,rt);
    if(r>lt)qs(lt,r);
}

int main(){
    scanf("%d",&n); 
    rep(i,1,n) scanf("%d",&a[i]);
    qs(1,n);
    rep(i,1,n) printf("%d ",a[i]);
}

by Florian18 @ 2023-11-23 23:12:32

写的是快速排序


by HYdroKomide @ 2023-11-24 08:08:41

@Florian18 数组开小了。而且尽量随机选取mid吧,不然容易被卡


|