关于线段树合并
  • 板块学术版
  • 楼主FZzzz
  • 当前回复12
  • 已保存回复12
  • 发布时间2020/5/4 17:10
  • 上次更新2023/11/7 03:11:35
查看原帖
关于线段树合并
174045
FZzzz楼主2020/5/4 17:10

我的线段树合并(在树上跑)是这样写的:

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;
}

这样的写法空间复杂度是多少呢?

2020/5/4 17:10
加载中...