我正在审核这个算法类的工作,我正在尝试做一些在课堂上给出的实践问题。这个问题把我难住了,我就是没办法解决它。我没有一个解决方案在O(logn)时间内出来。有人能帮我解决这个问题吗?是吗?
问题
假设我们得到一个n值序列x1,x2,…,xn的任意顺序和
寻求快速回答形式的重复查询:给定任意一对i和j
1≤i
最佳答案
对于a1,a2,a3,….a n的输入,构造一个包含最小值(a1,…,a k)和最小值(ak+1,…,an)的节点,其中k=n/2。
递归地构造树的其余部分。
现在,如果你想找出ai和aj之间的最小值:
找出i,j的最低共同祖先,让它成为k
从i开始,一直移动直到点击k。每次迭代检查子节点是否为左节点。如果是,则比较右子树的最小值并相应更新当前最小值。
同样,对于j,检查它是否是右节点….
在节点k,比较每个子树返回的值并返回最小值