【发布时间】:2016-06-23 16:43:12
【问题描述】:
我有 permutation(P) 的数字 1 到 N (<=10^5) 。假设我可以反转 permutation 的子数组。我必须找到summation(X*Y),其中x 是P 通过反转P 的任何子数组可以采取的形式数量,y 是此类形式的总反转。
例如
if N =2 ; and given permutation = 2 1
Then summation(X*Y) =
if i reverse subarray(1,1) = permutation = 2 1 inversion =1
if i reverse subarray(2,2) = permutation = 2 1 inversions =1
if i reverse subarray(1,2) = permutation = 1 2 inversion =0
summation (x*y) = 2*1 + 1*0 = 2
我的方法是选择每个n*(n+1)/2子数组并将其反转,计算其中的倒数并求和,Complexity= O(n(n+1)/2*nlogn)=O(n^3logn)
有O(nlogn)的方法吗?
https://en.wikipedia.org/wiki/Inversion_(discrete_mathematics)
【问题讨论】:
标签: algorithm