我有一系列数字A [0]到A [n-1]。
可能有2个可能的查询。
查询1:gcd i j:计算所有nos的gcd。 A [k]使得i <= k <= j。
查询2:更新i j:将A [i]更改为j
例如
gcd 2 4
gcd 1 5
update 2 3
gcd 2 4
update 4 1
gcd 3 6
执行此操作的最快算法是什么?
答案 0 :(得分:0)
好问题,
首先想到的是使用分段树。如果您不熟悉分段树,这里是非常有用的教程。在每个节点上,我们可以在该节点覆盖的段中保留数字的gcd。因此,我们需要考虑每个更新查询的logn节点数,对于第二个查询,我们只能返回保存在根节点中的值。对于每个节点,我们需要计算其两个子值的gcd,因此更新查询需要O((logn)^ 2)时间,第二个查询需要O(1)时间。