讨论 / C++题解
cjoier_gjh 2017-01-22 01:22:54
点我顶贴 收藏 删除
#include<stdio.h>

int a[100001],ans,r[100001];

void gb(int s,int t){

if(s==t)return;

int m,i,j,k;

m=(s+t)/2;

gb(s,m);gb(m+1,t);

i=s;j=m+1;k=s;

while(i<=m && j<=t){

if(a[i]<=a[j]){

r[k]=a[i];k++;i++;

}

else{

r[k]=a[j];k++;j++;ans+=m-i+1;

}

}

for(int u=i;u<=m;u++)r[k++]=a[u];

for(int u=j;u<=t;u++)r[k++]=a[u];

for(i=s;i<=t;i++)

a[i]=r[i];

}

int main(){

int i,j,k,n,m;

scanf("%d",&n);

for(i=1;i<=n;i++)scanf("%d",&a[i]);

gb(1,n);

printf("%d\n",ans);

return 0;

}#include<stdio.h>

int a[100001],ans,r[100001];

void gb(int s,int t){

if(s==t)return;

int m,i,j,k;

m=(s+t)/2;

gb(s,m);gb(m+1,t);

i=s;j=m+1;k=s;

while(i<=m && j<=t){

if(a[i]<=a[j]){

r[k]=a[i];k++;i++;

}

else{

r[k]=a[j];k++;j++;ans+=m-i+1;

}

}

for(int u=i;u<=m;u++)r[k++]=a[u];

for(int u=j;u<=t;u++)r[k++]=a[u];

for(i=s;i<=t;i++)

a[i]=r[i];

}

int main(){

int i,j,k,n,m;

scanf("%d",&n);

for(i=1;i<=n;i++)scanf("%d",&a[i]);

gb(1,n);

printf("%d\n",ans);

return 0;

}

//逆序对

查看更多回复
提交回复