连接组件范围查询

时间:2016-10-23 13:36:36

标签: algorithm tree connected-components

n 节点组成的图表,其中从 1 2 2 的边缘为 3 3 4 ,........, n-1 ñ

现在,有一个数组由 1 n 的排列组成,并且基于数组段给出了大量查询。确定给定段的节点(由数组元素指示)形成的连接组件的数量。例如,

数组: 4 5 3 2 1 查询包括: [1,5] [1,4] [2,4]

对于 [1,5] ,数组元素 1 2 3 4 5 并且所有都已连接并形成一个连接的组件。

对于 [1,4] ,数组元素 2 3 4 5 ,它们也形成一个连通的组件。

对于 [2,4] ,数组元素 2 3 5 ,所以 2 3 形成一个组件, 5 形成一个组件,因此 [总共 2 连接组件2,4]

1 个答案:

答案 0 :(得分:1)

由于图形没有周期,子图中的组件数等于顶点数减去边数。顶点数是查询间隔的长度。通过在所有k的点(置换中的k的位置,置换中的k + 1的位置)的点上构造用于2D正交范围计数查询的oracle,可以快速找到边的数量。