SDUT 3402:数据结构实验之排序五:归并求逆序数

来源:互联网 发布:网络共享组策略 编辑:程序博客网 时间:2024/06/10 00:16

数据结构实验之排序五:归并求逆序数

题目大意:给你n个数字,让你求这n个数字所能组成的逆序对的个数。

这个题有个坑点在于,n的数据范围到10万,因此最大的逆序对个数超过了int的范围,要用long long型的变量来存。还有这个题目限制只有40ms,使用cin、cout输入输出将超时。

代码如下:

#include <stdio.h>int A[111111], T[111111];long long count;void merge_sort(int x, int y){    if (y - x > 1)    {        int m = x + (y-x) / 2;        int p = x, q = m, i = x;        merge_sort(x, m);        merge_sort(m, y);        while (p < m || q < y)        {            if (q >= y || (p < m && A[p] <= A[q]))                T[i++] = A[p++];            else            {                T[i++] = A[q++];                count += m - p;            }        }        for (i = x; i < y; i++)            A[i] = T[i];    }}int main(){    int n;    while (~scanf("%d", &n))    {        count = 0;        for (int i = 0; i < n; i++)            scanf("%d", &A[i]);        merge_sort(0, n);        printf("%lld\n", count);    }    return 0;}


0 0