#include<stdio.h>
int a[1005], b[1005],c[1005];
int ans;
int main()
{
int n;
scanf("%d", &n);
for (int i = 1; i <= n; i++)
{
scanf("%d", &a[i]);
c[a[i]] = 1;
for(int j = 1; j <= a[i]; j++)
if(!c[j]) b[j]++;
}
//c[i]记录之前是否已经出现i,如果出现,则可以不再计算
//b[i]为逆序数列
for (int i = 1; i <= n; i++)
{
printf("%d ", b[i]);
ans += b[i];
}
printf("\n%d", ans);
//题目中只能相邻元素交换 ,因此每次交换最多只能消除一个逆序对 所以最小交换次数即逆序对的数量(逆序数列的和)
return 0;
}
acwing 3715.最小交换次数
最新推荐文章于 2023-07-12 17:14:39 发布