题目意思是说给你一列数,每次可以将相邻的两个数交换,这一步的代价是这两个数的和,求将所有数排好序的最少代价。
题解:
我们可以这么思考,由于每次都是交换相邻的两个数,所以将一个数放到它自己的位置去后,其他的数的相对位置没变,那么排序其他的数所需要消耗的代价将与这个数没关系,所以排序过程将相当于是冒泡排序。
这样的话我们用树状数组可以记录第i个数之前有多少个比它小的的数x
再记录这些比它小的数的和是多少sum
然后这个数移动到他自己的位置的代价就是
x*a[i]+sum。
最后的复杂度就是nlogn
以后排序和求和的题应该多想想树状数组~恩恩
1 #include