摘要:
基本思想是通过对问题的转化,最终得到<O(n),O(1)>时间复杂度。该算法分以下两大步骤:1)将RMQ问题转化为LCA问题:先构建输入数列A的笛卡尔树,构建笛卡尔树的复杂度为O(n)。2)将LCA问题转化为RMQ+1/-1问题:通过对笛卡尔树的DFS遍历得到欧拉路径(Euler Tour),建立三个数组E,L和R。其中E和L大小是2*n-1,E中元素表示笛卡尔树中每个结点的label值(实际上就是数列A的下标索引值),L中元素对应欧拉路径上每一个被访问结点的深度(即从root到该结点的深度,root本身的深度为0); R是笛卡尔树中的每一个结点第一次被访问时在E中的位置,即E[R 阅读全文