线段树合并

也是学了好长时间了,结果发现做题时根本不会用QwQ

概念

这个看名字就知道了吧,把两颗线段树合并为一颗,合并就可以做到信息的整合之类的

一般以权值线段树居多吧

思想

这个其实真没啥好讲的,我j觉得只要你会线段树那么只要稍微看一看就能明白线段树合并,甚至可以看思想后自己造代码

具体步骤是同步遍历两颗线段树,然后将维护的信息整合,如果一个节点一颗树上有而另一颗树上没有那么直接返回那个节点的编号

emmm 还有什么,好像真的没了啊

代码实现

1
2
3
4
5
6
7
8
int (int x, int y)
{
if(!x || !y) return x | y;
t[x].sum = t[x].sum + t[y].sum;
t[x].l = Merge(t[x].l, t[y].l);
t[x].r = Merge(t[x].r, t[y].r);
return x;
}

好了没有了,就这几行

总结

总感觉我这篇博客写的特别水

  • 像我上文所述,要你会线段树,看几眼应该就明白了线段树合并,好好理解就行了
  • 在我目前做的题中,线段树合并多用于一些关于查询子树的问题,而这些是线段树可以维护的(权值线段树)所以先每一个点建一颗权值线段树,然后递归合并统计结果
  • 之后会再补充一些例题啊之类的东西的

好了,这篇博客就写到这(心虚.jpg)有问题和意见欢迎提出