分段树的迭代代码 我想在C++中对段树进行编码,通过递归编写代码查询操作,但速度慢,不易实现。所以,如果有人能建议并解释通过迭代编写以下代码,将是一个很大的帮助。提前感谢
以下代码计算范围内的gcd分段树的迭代代码 我想在C++中对段树进行编码,通过递归编写代码查询操作,但速度慢,不易实现。所以,如果有人能建议并解释通过迭代编写以下代码,将是一个很大的帮助。提前感谢,c++,algorithm,segment-tree,C++,Algorithm,Segment Tree,以下代码计算范围内的gcd int getgcd(vector<int> T, int ss,int se, int L, int R, int index) { if (L <= ss && R >= se) return T[index]; if (se < L || ss > R) return 0; int mid = ((ss+se)>>1); return __gcd(getgcd(T
int getgcd(vector<int> T, int ss,int se, int L, int R, int index)
{
if (L <= ss && R >= se)
return T[index];
if (se < L || ss > R)
return 0;
int mid = ((ss+se)>>1);
return __gcd(getgcd(T, ss, mid, L, R, index<<1),getgcd(T, mid+1, se, L, R, (index<<1)+1));
}
int-getgcd(向量T,int-ss,int-se,int-L,int-R,int-index)
{
如果(L=se)
返回T[index];
if(seR)
返回0;
int mid=((ss+se)>>1);
return u gcd(getgcd(T,ss,mid,L,R,index通过值传递向量。每次调用此函数时都会复制它。因此,解决方案的时间复杂度是每个查询的O(n*logn),而不是O(logn)。通过引用传递向量应该可以解决此问题。如果您确实想迭代执行此操作,请注意它只是一个带有额外内容的DFS。
您可以使用堆栈轻松地执行迭代DFS。当您使用调试器时,哪些行会导致问题?哪些输入值会导致问题?从长远来看,web搜索将尾部递归算法转换为迭代算法可能比有人为您做更大的成功。值RSE,ss,L,r,索引可以高达10^5