zoukankan      html  css  js  c++  java
  • 线段树入门(汇总)

    • 标签:线段树

    这篇文章主要内容主要来自 NotOnlySuccess 大神若干年前博客中的博文 《【完全版】线段树》,由于时间有些久远,现在已经找不到大神的原博文了,所以整理了一些网上的资料,在这里还原一下。

    代码风格

    • maxn 是题目给的最大区间,而节点数要开4倍,确切来说节点数要开大于 maxn 的最小 (2_x) 的两倍;
    • lsonrson 分别表示节点的左儿子和右儿子,由于每次传参数的时候都固定是这几个变量,所以可以用预定义比较方便地表示;
    • push_up(int rt) 是把当前节点的信息更新到父节点;
    • push_down(int rt) 是把当前节点的信息更新给儿子节点;
    • rt 表示当前子树的根(root),也就是当前所在的节点。

    题型分类

    • 单点更新 :最最基础的线段树,只更新叶子节点,然后把信息用 push_up(int rt) 这个函数更新上来;
    • 成段更新 :(通常这对初学者来说是一道坎)需要用到延迟标记(或者说懒惰标记),简单来说就是每次更新的时候不要更新到底,用延迟标记使得更新延迟到下次需要更新 or 询问到的时候;
    • 区间合并 :这类题目会询问区间中满足条件的连续最长区间,所以 push_up 的手需要对左右儿子的区间进行合并;
    • 扫描线 :这类题目需要将一些操作排序,然后从左到右用一根扫描线(当然是我们脑子里)扫过去,最简单的就是矩形面积并,周长并等问题。

    单点更新

    https://www.cnblogs.com/codedecision/p/11676957.html

    成段更新

    https://www.cnblogs.com/codedecision/p/11687527.html

    区间合并

    暂无。

    扫描线

    暂无。

  • 相关阅读:
    Linux-Bond-Configure
    Kvm学习文档记录
    Can't locate Log/Dispatch.pm in @INC
    sas2ircu工具信息收集及磁盘定位
    python 之tornado 入门
    zabbix 监控 tomcat jmx
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
  • 原文地址:https://www.cnblogs.com/codedecision/p/11687537.html
Copyright © 2011-2022 走看看