归并模板

#include<iostream>
#include<algorithm>
using namespace std;

const int N=100010;
int q[N],tmp[N];
long int res;

void merge_sort(int q[],int l,int r){
    if(l>=r)    return;
    int mid=l+r>>1,k=0;
    merge_sort(q,l,mid);
    merge_sort(q,mid+1,r);
    int i=l,j=mid+1;
    while(i<=mid && j<=r){
        if(q[i]<=q[j])  tmp[k++]=q[i++];
        else{
            res+=mid-i+1;
            tmp[k++]=q[j++];
        }
    }
    while(i<=mid)   tmp[k++]=q[i++];
    while(j<=r)     tmp[k++]=q[j++];
    for(int i=l,j=0;i<=r;i++,j++)   q[i]=tmp[j];
    return ;
}



int main(){
    int n;
    cin>>n;
    for(int i=0;i<n;i++)    cin>>q[i];
    merge_sort(q,0,n-1);
    cout<<res;
    return 0;
}
posted @ 2022-01-02 13:39  秋月桐  阅读(20)  评论(0编辑  收藏  举报