计算列表中二维对x,y的反演

问题描述

这个问题就像普通的计数反演问题一样,只是输入不再是一个单数列表,而是一个(x,y)对列表。

对于[[x1,y1),(x2,y2),(x3,y3),...,(xn,yn)]对的列表,对(i,j)是iff { {1}}和i < jxi>xj。是否可以用O(n logn logn)编写算法?我尝试了几种方法,但是在合并步骤中,列表右半部分的每个元素都必须与左半部分的所有元素进行比较,导致时间复杂度为n平方。

解决方法

基于left坐标将列表分为两部分rightx。然后,比较两半的最低点(基于它们的y坐标)。有两种情况:

  1. 左边的点低于右边的点,那么左边的右边的所有点都有xi<xjyi<yj
  2. 右边的点低于左边,因此yi>yj条件对于左边的任何点都成立。
    根据这两种情况更新答案后,您可以删除这两点之一,然后继续处理剩余的排序列表(也可以递归求解leftright)。这应该在O(nlog^2n)
  3. 中起作用