先暴力统计开始时逆序数对数量add
再枚举a[i]
add=add+(n-1)-2*a[i];
记录最小
View Code
#include<stdio.h>
int a[60009];
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int i;
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
int j;
int add=0;
for(i=1;i<n;i++)
{
for(j=i+1;j<=n;j++)
{
if(a[i]>a[j])
add++;
}
}
int min=add;
for(i=1;i<n;i++)
{
add=add+n-1-a[i]*2;
if(add<min)
min=add;
}
printf("%d\n",min);
}
}
int a[60009];
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int i;
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
int j;
int add=0;
for(i=1;i<n;i++)
{
for(j=i+1;j<=n;j++)
{
if(a[i]>a[j])
add++;
}
}
int min=add;
for(i=1;i<n;i++)
{
add=add+n-1-a[i]*2;
if(add<min)
min=add;
}
printf("%d\n",min);
}
}