一种具有O(nlg n)运行时间的算法

时间:2015-03-15 17:25:16

标签: performance algorithm

提供了

a1, a2, ..., an 序列号。 现在,提供一个运行时间为 O(nlg n) 的算法来计算 (i, j) i < j 的对数 ai > aj

输入:首先是测试用例的数量。对于每个测试用例,数字首先是 n ,然后是 a1, a2, ..., an 。的 N <= 100000

ai <= 100000000

现在,我希望输出如下:

输出:对于每个测试,只打印一个数字(即问题开头的问题值)。

示例输入:

2
4
3 2 1 5
5

8 9 3 2 1

示例输出:

3

9

1 个答案:

答案 0 :(得分:4)

这是一个称为“反转计数”的标准算法问题。我会给你一个主要的来源,而不是从头开始解释。检查此link。 关键是 -

i)你只需将数组分成2个相等的部分。

ii)然后得到这个部分的答案。

iii)合并时,您需要考虑左段中的数字如何小于右段。这就是答案的最终结果。

iv)归还。

就是这样。您必须执行在合并排序中执行的所有操作。除此之外,您只需要在合并操作期间正确确定反转次数。