Recursion 性能问题:段树、更新功能

Recursion 性能问题:段树、更新功能,recursion,profiling,segment-tree,Recursion,Profiling,Segment Tree,我用这样的函数更新段树。分析表明,这是瓶颈: void update (int tree[], int root, int left, int right, int pos, double val) { if (left == right) { data[tree[root]] = val; } else { int middle = (left + right) / 2; if (pos <= mid

我用这样的函数更新段树。分析表明,这是瓶颈:

void update (int tree[], int root, int left, int right, int pos, double val)
{
    if (left == right)
    {
        data[tree[root]] = val;
    }
    else
    {
        int middle = (left + right) / 2;
        if (pos <= middle)
            update(tree, root*2, left, middle, pos, val);
        else
            update(tree, root*2+1, middle+1, right, pos, val);
        tree[root] = indexOfMax(tree, tree[root*2], tree[root*2+1]); // simple comparations
    }
}
// indexOfMax is just a simple comparation
int indexOfMax(int tree[], int a, int b)
{
    //cout << data[tree[a]] << " > " << data[tree[b]] << " ? " << tree[a] << " : " << tree[b] << endl;
    return data[a] > data[b] ? a : b;
}
void更新(int-tree[],int-root,int-left,int-right,int-pos,double-val)
{
如果(左==右)
{
数据[树[根]]=val;
}
其他的
{
中间整数=(左+右)/2;

如果first look函数中的(pos)正常,您有什么性能问题?您的算法是否比预期的慢?请提供indexOfMax()的代码。进行大约10次更新(26秒)。在此期间,您将看到问题。