zoukankan      html  css  js  c++  java
  • 主席树入门

    推荐博客 : https://blog.csdn.net/creatorx/article/details/75446472

         : https://www.cnblogs.com/zyf0163/p/4749042.html

      早在很久之前就听过主席树这个名词,不过一直没有去学,当时想的是先把线段树学明白了,今天想学这个是因为一场 CF。

      主席树其实就是由 n 棵权值线段树组成,并且你要保留着 i 棵线段树的根节点,这 i 棵线段树其实就可以看成是不同的历史的版本,现在如果想让我们查询某一段区间时,我们直接做差就可以求,其实对于每一个根节点我们都可以看成是一棵线段树,与线段树的操作是一样的。

      主席树的结构体:

    struct node
    {
        ll l, r;
        ll sum;
    }t[maxn*20];
    

     l , r 表示当前节点的左右儿子的编号,其不满足线段树的结点编号关系,sum 表示当前结点内有多少个点值。

    另外,区别于线段树的一点就是它需要开辟的结点是 20 倍,区别于线段树,为什么呢?因为每次建树的时候都是新增一条链,那么你需要新开的结点就是 logn 个结点,所以总的结点数就是 maxn*logn .

    还有一点就是主席树在建树前要离散化。

    东北日出西边雨 道是无情却有情
  • 相关阅读:
    C语言中的复合类型
    C语言中的函数与指针
    C语言中的循环结构与选择结构
    C语言中的运算符
    C语言中的变量
    毕业论文查重网站
    Protocol and Delegate协议和代理
    NSArray与NSMutableArray 数组与可变数组
    UI复习
    NSString方法与NSMutableString方法
  • 原文地址:https://www.cnblogs.com/ccut-ry/p/8824469.html
Copyright © 2011-2022 走看看