Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
分段树的迭代代码 我想在C++中对段树进行编码,通过递归编写代码查询操作,但速度慢,不易实现。所以,如果有人能建议并解释通过迭代编写以下代码,将是一个很大的帮助。提前感谢_C++_Algorithm_Segment Tree - Fatal编程技术网

分段树的迭代代码 我想在C++中对段树进行编码,通过递归编写代码查询操作,但速度慢,不易实现。所以,如果有人能建议并解释通过迭代编写以下代码,将是一个很大的帮助。提前感谢

分段树的迭代代码 我想在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

以下代码计算范围内的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, 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