我的线段树合并(在树上跑)是这样写的:
node* merge(node* a,node* b){
if(!a) return b;
if(!b) return a;
a->sum+=b->sum;
a->ch[0]=merge(a->ch[0],b->ch[0]);
a->ch[1]=merge(a->ch[1],b->ch[1]);
delete b;
return a;
}
这样的空间复杂度是一个 log。
如果要可持久化,就是这样写:
node* merge(node* a,node* b){
if(!a) return b;
if(!b) return a;
node* x=new node(a->l,a->r);
x->sum=a->sum+b->sum;
x->ch[0]=merge(a->ch[0],b->ch[0]);
x->ch[1]=merge(a->ch[1],b->ch[1]);
return x;
}
这样的写法空间复杂度是多少呢?