In this PRoblem, you have to analyze a particular sorting algorithm. The algorithm processes a sequence of n distinct integers by swapping two adjacent sequence elements until the sequence is sorted in ascending order. For the input sequence
9 1 0 5 4 ,
Ultra-QuickSort produces the output
0 1 4 5 9 .
Your task is to determine how many swap Operations Ultra-QuickSort needs to perform in order to sort a given input sequence.
The input contains several test cases. Every test case begins with a line that contains a single integer n < 500,000 – the length of the input sequence. Each of the the following n lines contains a single integer 0 ≤ a[i] ≤ 999,999,999, the i-th input sequence element. Input is terminated by a sequence of length n = 0. This sequence must not be processed.
For every input sequence, your program prints a single line containing an integer number op, the minimum number of swap operations necessary to sort the given input sequence.
求把一个序列排序所需要的最小相邻交换次数。
题目可以转化为求数组所有数字的逆序数之和,因为n比较大的关系,所以舍弃
一般这样的题目都可以用归并排序来解决,或者树状数组也可以。
假设当前归并排序的两个序列为
1 3 4 9
2 5 7 8
分别取数3、2,3>2,说明3后面所有的数都比2大(m-p),因为序列1一定在序列2前面,那这一个解释便是逆序数咯!
另外,当序列2全部排序完之后序列1还剩9,此时可以得到,9以及后面的所有的数都比序列2大(y-m)。
新闻热点
疑难解答