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