您的位置:首页 > 其它

南阳oj 求逆数 题目117

2015-09-07 20:36 162 查看

#include<stdio.h>

#define N 1000001

int a
,b
;

long long sum;

void gb(int be,int mi,int en)

{

int i=be,j=mi+1,pos=be;

while(i<=mi&&j<=en)

{

if(a[i]<=a[j]) b[pos++]=a[i++];

else

{

b[pos++]=a[j++];

sum+=mi-i+1;

}

}

while(i<=mi) b[pos++]=a[i++];

while(j<=en) b[pos++]=a[j++];

for(int i=be,j=be;i<=en;i++,j++)

a[i]=b[j];

}

void px(int be,int en)

{

if(be<en)

{

int mi=(be+en)/2;

px(be,mi);

px(mi+1,en);

gb(be,mi,en);

}

}

int main()

{

int t;

scanf("%d",&t);

while(t--)

{

sum=0;

int n;

scanf("%d",&n);

for(int i=1;i<=n;i++)

scanf("%d",&a[i]);

px(1,n);

printf("%lld\n",sum);

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: