【发布时间】:2014-03-13 10:48:06
【问题描述】:
给定一个包含 N 个整数的固定数组 A,其中 N
现在我有多达 100,000 个 {V, L, R} 形式的查询,在每个查询中我需要找到最大的数 A[i],其中 i 在 [L,R] 范围内不是互质的给定值V。(即GCD(V,A[i])不等于1。)
如果不可能,那么还要告诉给定范围内的所有数字都与 V 互质。
一种基本的方法是从 L 和 R 之间的每个 A[i] 进行迭代,并用值 V 计算 GCD,从而找到最大值。但是如果查询的数量也可以达到 100,000,有没有更好的方法来做到这一点。在这种情况下,每次都检查每个数字的效率太低了。
例子:
- 设 N=6,数组为 [1,2,3,4,5,4],V 为 2,范围 [L,R] 为 [2,5]。
- 那么答案是 4。
解释:
GCD(2,2)=2
GCD(2,3)=1
GCD(2,4)=2
GCD(2,5)=1
所以这里的最大值是 4。
【问题讨论】:
-
这是网评问题吗?可以发个链接吗?
-
它来自正在运行的 codechef 挑战。我会通过在此处发布解决方案来阻止用户破坏乐趣
-
尝试使用段树+RMQ
-
@TejasPatel 如何在这个问题中使用 RMQ?
-
我知道这是一个竞赛问题,所以我现在不想讨论它。