牛客OJ:逆序数对

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ShellDawn/article/details/88881260

shell排序变体

#include <bits/stdc++.h>
using namespace std;


const int mod = 1000000007;
int solve(vector<int>& data,int l,int r){
    if(l>=r-1) return 0;
    int mid = (l+r+1)/2;
    int ans1 = solve(data,l,mid);
    int ans2 = solve(data,mid,r);
    int i = l;
    int j = mid;
    int ans = ans1 + ans2;
    while(i<mid&&j<r){
        if(data[i] > data[j]){
            ans = (ans + (r-j))%mod;
            i++;
        }else{
            j++;
        }
    }
    sort(data.begin()+l,data.begin()+r,greater<int>());
    return ans;
}
int InversePairs(vector<int> data) {
    int l = data.size();
    return solve(data,0,l);
}

int main(){
    int a[] = {1,2,3,4,5,6,7,0};
    vector<int> v(a,a+8);
    printf("%d\n",InversePairs(v));
    return 0;
}

猜你喜欢

转载自blog.csdn.net/ShellDawn/article/details/88881260