蒟蒻求助!!!

P1908 逆序对

rabbitdit @ 2021-02-04 17:08:35

#include<bits/stdc++.h>
using namespace std;
int n,a1[1000005],num[1000005];
int tol=0;
void gb(int l,int r) {
    if(r==l+1 ||r==l) {
        if(num[r]<num[l]) {
            swap(num[r],num[l]);
            tol++;
        }
    } else {
        gb(l,(l+r)/2);
        gb((l+r)/2+1,r);
        int L=l,R=(l+r)/2+1;
        for(int i=l; i<=r; i++) {
            if((num[L]<num[R] && L<=(l+r)/2)||R==r+1) {
                a1[i]=num[L];
                L++;
            } else {
                a1[i]=num[R];
                R++;
                tol+=(l+r)/2-L;
            }
        }
        for(int i=1; i<=r; i++) {
            num[i]=a1[i];
        }
    }
}
int main() {
    cin>>n;
    for(int i=1; i<=n; i++) {
        cin>>num[i];
    }
    gb(1,n);
    cout<<tol;
}

照着题解的思路写的,请问为什么会错呢


|