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

    前置知识

    权值线段树&动态开点线段树

    适用范围

    有时候我们需要对权值线段树进行合并操作。然后就用到了线段树合并。一般是有很多棵线段树,然后需要将其中的两棵合并起来。

    方法

    其实方法很简单呢。就是分三种情况讨论一下。假设现在要将线段树a和线段树b合并。并且a成为合并之后的线段树。
    如果a有当前子树,而b没有,那么返回a的当前子树
    如果b有当前字数,而a没有,那么返回b的当前子树
    如果现在到了叶子节点,那么就按照题目的要求将叶子节点合并起来。
    不要忘记pushup

    int merge(int cur,int a,int l,int r) {
       if(!cur) return a;
       if(!a) return cur;
       if(l == r) {
          //对叶子节点进行操作
          return cur;
       }
       int mid = (l + r) >> 1;
       Ls = merge(Ls,TR[a].ls,l,mid);
       Rs = merge(Rs,TR[a].rs,mid + 1,r);
       up(cur);
       return cur;
    }
    

    例题

    做完这道例题应该就懂了。
    luogu4556
    题解

  • 相关阅读:
    10/11
    el表达式的坑
    在idea下两个项目之间的maven父子级项目依赖
    树上任意两点间距离
    优先级顺序
    HDU 6447
    KMP
    cf 1029 C
    牛客练习赛25
    莫比乌斯算法
  • 原文地址:https://www.cnblogs.com/wxyww/p/10099245.html
Copyright © 2011-2022 走看看