一个范围内连接的城市数量

Number of connected cities in a range

数组A中给出了N个城市,还有一辆自行车最多可以在城市之间行驶K个单位。

我们需要回答 Q 个问题。 每个查询都有 L R X 的形式。它询问从城市 X 可到达的城市数量,这些城市在 A 中的 L 和 R 之间(1 - 索引)。每个城市都有一个加油站,所以你可以假设当你到达它时燃料会得到补充。

示例:

A = [4, 3, 1, 9, 6], K = 2

Q1 = 1 3 6 => (3)

Q2 = 1 5 3 => (4)

Q1,从6号城到4号城,再到3号城,再到1号城。

第二季度,从城市3出发,可以去到除城市9以外的所有城市。

限制条件:

N <= 10^5 and Q <= 10^5 and K <= 10^8

如何解决这个问题?显然不可能从每个 X 做一个 DFS / BFS,因为它非常昂贵并且会超时。我试着想过 Disjoint sets 加入彼此相距 K 距离以内的城市,但我对此不是很清楚。

感谢任何帮助。谢谢!

我推荐:

  1. 按位置对城市进行排序:[4, 3, 1, 9, 6] -> [1,3,4,6,9]
  2. 对此进行线性扫描可以让您确定哪些城市组可以相互到达。根据城市所在的组标记城市:[1,1,1,1,2]
  3. 根据起始城市的标签标记每个查询
  4. 将标签1的所有城市加入线段树
  5. 使用线段树回答所有标签 1 查询
  6. 从线段树中移除标签1城市

然后对每个标签重复步骤 4、5、6。

这应该给出 O(NlogN)+O(QlogN) 的总复杂度。