Data structures 分段树在求解插入查询中的应用

Data structures 分段树在求解插入查询中的应用,data-structures,binary-tree,segment-tree,Data Structures,Binary Tree,Segment Tree,在哪里可以找到解决刺穿问题的分段树实现的参考?刺穿问题要求返回所有间隔(从形式为[a,b]的预定义m间隔集合中),1在线法官是否有问题?如果是,请链接到原始问题?是的,是关于CodeChef上的AUG13->seabal:但在这个问题中,我们需要返回给定范围内的所有间隔,这与刺伤查询不同(刺伤查询返回包含给定点的所有间隔).我发布的代码是正确的,错误是在处理段中。 int n, m, x[100005], y[100005], q; list< int > segm[

在哪里可以找到解决刺穿问题的分段树实现的参考?刺穿问题要求返回所有间隔(从形式为[a,b]的预定义m间隔集合中),1在线法官是否有问题?如果是,请链接到原始问题?是的,是关于CodeChef上的AUG13->seabal:但在这个问题中,我们需要返回给定范围内的所有间隔,这与刺伤查询不同(刺伤查询返回包含给定点的所有间隔).我发布的代码是正确的,错误是在处理段中。
    int n, m, x[100005], y[100005], q;
    list< int > segm[200005];
    //Search for q in the segment tree
    void segmQuery(int node, int left, int right)
    {
        for (list<int>::iterator i = segm[node].begin(); i != segm[node].end(); i++)
        {
            //Process the segment
        }
        if (left < right)
        {
            int middle = left + (right - left) / 2;
            if (q <= middle)
                segmQuery(2 * node, left, middle);
            if (q > middle)
                segmQuery(2 * node + 1, middle + 1, right);
        }
    }
    //Add the q-th segment into the tree
    //Segment is denoted by x[q], y[q]
    void segmAdd(int node, int left, int right)
    {
        if ((x[q] <= left) && (right <= y[q]))
            segm[node].push_back(q);
        else
        {
            int middle = left + (right - left) / 2;
            if (x[q] <= middle)
                segmAdd(2 * node, left, middle);
            if (y[q] > middle)
                segmAdd(2 * node + 1, middle + 1, right);
        }
    }