POJ1804 Brainman

来源:互联网 发布:有意思的java小程序 编辑:程序博客网 时间:2024/06/06 11:00

水题,没啥好说的,归并排序求逆序对
代码如下:

#include<stdio.h>#include<stdlib.h>int a[1000000], b[1000000];int num;void mix(int *a,int *n,int left,int mid,int right){    int i = left;    int j = mid + 1;    int k = left;    while (i < mid + 1 && j < right + 1)    {        if (a[i] <= a[j])            b[k++] = a[i++];        else        {            b[k++] = a[j++];            num += mid - i + 1;        }    }    while (i != mid + 1)        b[k++] = a[i++];    while (j != right +1 )        b[k++] = a[j++];    for (i = 0; i < k; i++)        a[i] = b[i];}void sever(int *a,int *b,int left,int right){    int mid;    if (left < right)    {        mid = (left + right) / 2;        sever(a, b, left, mid);        sever(a, b, mid + 1, right);        mix(a, b, left, mid, right);    }}int main(){    int m,n,i,j,count=1;    scanf("%d", &m);    for ( i = 0; i < m; i++)    {        num = 0;        scanf("%d", &n);        for (j = 0; j < n; j++)            scanf("%d", &a[j]);        sever(a, b, 0, n - 1);        printf("Scenario #%d:\n", count++);        printf("%d\n", num);        printf("\n");    }    return 0;}
0 0
原创粉丝点击