POJUltra-QuickSort(归并排序)

来源:互联网 发布:dns协议udp端口号 编辑:程序博客网 时间:2024/06/09 15:02

原题地址:点击打开链接

题意:就是问你逆序对的个数,用冒泡会超时,所以用归并。

#include<stdio.h>int a[500010];int b[500010];long long res=0;void merge(int l1,int r1,int l2,int r2){int begin=l1,end=r2,low=l1;while(l1<=r1&&l2<=r2){if(a[l1]<a[l2]){b[begin]=a[l1];begin++;l1++;}else{b[begin++]=a[l2++];res+=(r1-l1+1);}}while(l1<=r1)b[begin++]=a[l1++];while(l2<=r2)b[begin++]=a[l2++];while(low<begin){a[low]=b[low];low++;}}void mSort(int left,int right){if(left==right)return ;int mid=(left+right)/2;mSort(left,mid);mSort(mid+1,right);merge(left,mid,mid+1,right);}int main(){int n,i;while(scanf("%d",&n)&&n){res=0;for(i=0;i<n;i++){scanf("%d",&a[i]);}mSort(0,n-1);printf("%lld\n",res);}return 0;}


0 0