http://acm.hdu.edu.cn/showproblem.php?pid=1394
先对初始队列统计逆序对数,然后再把每个数一个个移到后面统计逆序对数,取最小。
注意,这里因为是n个数的范围是0~n-1,所以可以利用其性质统计逆序对数。
把位于第一位的num[i]移到最后一位,则变化的逆序对数是在上一个序列(即num[i]为第一位的序列)的基础上加上比num[i]大的数的个数,再减去比num[i]小的数的个数(因为num[i]移到最后以后,只能与前面比他大的数构成逆序对,而在上一个序列中与num[i]构成逆序对的在此序列则没办法构成)。
在求原始序列的逆序对数的时候,可以用线段树or树状数组,特别要注意的是,树状数组的下标不能取0!!要不然会进入死循环~~
代码如下:
本文介绍了一种算法,用于解决通过调整序列元素位置来最小化逆序对数量的问题。利用线段树或树状数组高效计算逆序对数,并提供详细的实现代码。
147

被折叠的 条评论
为什么被折叠?



