3234. Sort

827843896

题什么意思?

Kevin_K

这题炸范围了吧……

10165101104
10165101104
WhiteLi

唯一的坑就是会爆int。。

╮ 潜心 ╰

这个题要大家求逆序数 (线代的基本概念)
暴力n^2会超时 所以用归并排序
也算是模板题了……
#include
#define max 1000001
long long a[max],b[max];
long long count;

void Merge(long long *a, int start, int mid, int end)
{
    int i = start,j = mid + 1,k = start;
    while(i <= mid && j <= end)
    {
        if(a[i] <= a[j])  b[k++] = a[i++];
        else
        {
            count += j - k;
            b[k++] = a[j++];
        }
    }
    while(i <= mid) b[k++] = a[i++];
    while(j <= end) b[k++] = a[j++];
    for(int i = start; i <= end; i++)
        a[i] = b[i];
}

void MergeSort(long long *a, int start, int end)
{
    if(start < end)
    {
        int mid = (start + end)/2;
        MergeSort(a,start,mid);
        MergeSort(a,mid+1,end);
        Merge(a,start,mid,end);
    }
}
int main() {
    //freopen("testin.txt", "r", stdin);
    //freopen("testout.txt", "w", stdout);
    int n;
    while(scanf("%d",&n) != EOF)
    {
        count = 0;
        for(int i = 0; i < n; i++)
            scanf("%lld", &a[i]);
        MergeSort(a,0,n-1);
        printf("%lld\n",count);
    }
    return 0;
}
你当前正在回复 博客/题目
存在问题!