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