POJ(2299)

来源:互联网 发布:js数组排序 编辑:程序博客网 时间:2024/05/05 16:31
#pragma warning(disable:4996)#include<cstdio>#include<cstring>#include<string>#include<cmath>#include<vector>#include<algorithm>#include<iostream>#include<time.h>using namespace std;const int INF = 0x3f3f3f3f;int a[500005];int T[500005];__int64 sum;void MergeSort(int *a, int x, int y,int *T){    if (y - x <= 1)        return ;    int m = x + (y - x) / 2;    MergeSort(a, x, m,T);    MergeSort(a, m, y,T);    int p = x, q = m, i = x;    while (p < m||q < y)    {        if (q>=y||(p<m&&a[p]<=a[q]))        {            T[i++] = a[p++];        }        else        {            T[i++] = a[q++];            sum += m - p;        }    }    for (int i = x; i <y; i++)    {        a[i] = T[i];    }}int main(){    int n;    while (cin >> n, n)    {        memset(a, 0, sizeof(a));        memset(T, 0, sizeof(T));        sum = 0;        for (int i = 1; i <= n; i++)        {            cin >> a[i];        }       MergeSort(a, 1, n + 1, T);       printf("%I64d\n", sum);    }    return 0;}
0 0