在数组A中给出了N个城市。还有一辆自行车,最多可在两个城市之间行驶K个单位。
我们需要回答Q个查询。 每个查询的格式均为L RX。它查询从A的L和R之间的城市X可以到达的城市X的城市数量(1-索引)。每个城市都有一个加油泵,因此您可以假设到达时会补充燃料。
示例:
A = [4,3,1,9,6],K = 2
Q1 = 1 3 6 =>(3)
Q2 = 1 5 3 =>(4)
在第一季度,您可以从城市6到城市4,然后到城市3,然后到1。
第二季度,您可以从城市3前往除城市9之外的所有城市。
约束:
N <= 10 ^ 5和Q <= 10 ^ 5和K <= 10 ^ 8
如何解决此问题?显然,不可能从每个X进行DFS / BFS,因为它非常昂贵并且会超时。我尝试过使用“不相交集”来加入彼此之间K距离内的城市,但我对此并不十分清楚。
感谢您的帮助。谢谢!
答案 0 :(得分:4)
我推荐:
然后为每个标签重复步骤4、5、6。
这应该使总复杂度为O(NlogN)+ O(QlogN)。