我想在c ++中编写段代码树并通过递归编写代码查询操作,但它很慢并且给出了TLE。所以,有人可以建议并通过迭代来解释下面的代码,这将是一个很大的帮助。谢谢。
以下代码计算范围内的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));
}
在这里,
T - 细分树
ss - 分段开始
se -segment end
索引 - 分段树的当前节点
L - 下限查询
R -upper uery bound
答案 0 :(得分:2)
按值传递矢量。每次调用此函数时都会复制它。因此,解决方案的时间复杂度为每个查询O(n * log n),而不是O(log n)。通过引用传递矢量应该修复它。
答案 1 :(得分:0)
如果您确实想重复执行此操作,请注意,它只是一个带有附加功能的DFS。 您可以使用堆栈轻松地执行迭代DFS。