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
答案 0 :(得分:4)
这是一个称为“反转计数”的标准算法问题。我会给你一个主要的来源,而不是从头开始解释。检查此link。 关键是 -
i)你只需将数组分成2个相等的部分。
ii)然后得到这个部分的答案。
iii)合并时,您需要考虑左段中的数字如何小于右段。这就是答案的最终结果。
iv)归还。
就是这样。您必须执行在合并排序中执行的所有操作。除此之外,您只需要在合并操作期间正确确定反转次数。