zoukankan      html  css  js  c++  java
  • 线段树合并学习笔记

    顾名思义

    就是两颗线段树合成一个线段树
    那合成的线段树是适合所有线段树吗
    当然不是,是动态开点线段树

    建树

    这里建n个节点的时候,每个节点建一棵树
    而且要按照一定的形态建立一条链
    就是说如果最终形态是有n个数字的树,
    那你初始化的那一条链子一定是这颗树上扣下来的
    这样才方便合并

    merge操作

    最重要的操作
    流程:
    如果x和y有一颗树为空,直接返回
    否则,他们上面肯定形态相同(建树你干了什么?)
    那就留下一个x好了
    处理一下size[x]什么的芭芭拉拉
    然后右儿子,左儿子一同递归下去

    int Merge(int x,int y)
    {
    	if(!x||!y)  return y;
    	size[x]+=size[y];
    	lc[x]=Merge(lc[x],lc[y]);
    	rc[x]=Merge(rc[x],rc[y]);
    	return x;
    }
    

    其他操作

    类似于主席树,自己瞎yy就好

  • 相关阅读:
    Jenkins(5)生成allure报告
    git 命令
    外连跳转微信
    微信分享接口
    微信接口
    计算php程序运行时间
    数组合并 不覆盖
    LARAVEL 分页
    laravel 随笔
    jq 监听返回事件
  • 原文地址:https://www.cnblogs.com/dsrdsr/p/10096237.html
Copyright © 2011-2022 走看看