我给出了一个大小为N的数组。我有Q查询我必须计算L和R之间的gcd LR,其中1≤L≤R≤N。
如何有效地计算它因为蛮力方法会失败。
答案 0 :(得分:1)
GCD是加性和可交换的。这意味着段树可以使用每个范围GCD查询的log(N)时间来解决此问题。
答案 1 :(得分:1)
段树可用于在适度的时间内进行预处理和查询。对于分段树,预处理时间为O(n),GCD查询的时间为 O(Logn) 。所需的额外空间是O(n)来存储段树。
细分树的表示
树的数组表示用于表示段树,即,对于索引i处的每个节点,
可以在http://www.geeksforgeeks.org/gcds-of-a-given-index-ranges-in-an-array/
找到实施