2013-team6/Segment-Tree

从 Trac 迁移的文章

这是从旧校内 Wiki 迁移的文章,可能存在一些样式问题,您可以向 memset0 反馈。

原文章内容如下:

{{{
区间两端都闭

//单个元素
void insert(int index, int l0, int r0, int pos, int x)
{
    if (l0 == pos && r0 == pos){
        ...
    }
    else{
        int m0 = (l0 + r0) / 2;
        if (pos <= m0){
            insert(index * 2, l0, m0, pos, x);
        }
        if (pos > m0){
            insert(index * 2 + 1, m0 + 1, r0, pos, x);
        }
        ...
    }
}

//区间
int ask(int index, int l0, int r0, int l, int r)
{
    if (l0 == l && r0 == r){
        ...
    }
    else{
        int m0 = (l0 + r0) / 2;
        if (l <= m0){
            ask(index * 2, l0, m0, l, m0 < r ? m0 : r);
        }
        if (r > m0){
            ask(index * 2 + 1, m0 + 1, r0, m0 + 1> l ? m0 + 1: l, r);
        }
        ...
    }
}

by ltr199010
}}}
区间两端都闭
//单个元素
void insert(int index, int l0, int r0, int pos, int x)
{
    if (l0 == pos && r0 == pos){
        ...
    }
    else{
        int m0 = (l0 + r0) / 2;
        if (pos <= m0){
            insert(index * 2, l0, m0, pos, x);
        }
        if (pos > m0){
            insert(index * 2 + 1, m0 + 1, r0, pos, x);
        }
        ...
    }
}
//区间
int ask(int index, int l0, int r0, int l, int r)
{
    if (l0 == l && r0 == r){
        ...
    }
    else{
        int m0 = (l0 + r0) / 2;
        if (l <= m0){
            ask(index * 2, l0, m0, l, m0 < r ? m0 : r);
        }
        if (r > m0){
            ask(index * 2 + 1, m0 + 1, r0, m0 + 1> l ? m0 + 1: l, r);
        }
        ...
    }
}
by ltr199010