POJ 1904 Brainman(归并求逆序数)

来源:互联网 发布:学日语软件樱花 编辑:程序博客网 时间:2024/05/19 04:28
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int a[1005];int c[1005];int n,cnt;void MergeSort(int l, int r){    int mid, i, j, tmp;    if( r > l+1 )    {        mid = (l+r)/2;        MergeSort(l, mid);        MergeSort(mid, r);        tmp = l;        for( i=l, j=mid; i < mid && j < r; )        {            if( a[i] > a[j] )            {                c[tmp++] = a[j++];                cnt += mid-i;            }            else c[tmp++] = a[i++];        }        if( j < r ) for( ; j < r; ++j ) c[tmp++] = a[j];        else for( ; i < mid; ++i ) c[tmp++] = a[i];        for ( i=l; i < r; ++i ) a[i] = c[i];    }}int main(){    int T;    int Case=1;    //freopen("d:\\test.txt","r",stdin);    scanf("%d",&T);    while(T--)    {        scanf("%d",&n);        for(int i=0; i<n; i++)        {            scanf("%d",&a[i]);        }        memset(c,0,sizeof(c));        cnt=0;        MergeSort(0,n);        printf("Scenario #%d:\n%d\n\n",Case++,cnt);    }    return 0;}

0 0
原创粉丝点击