• 主席树入门


    推荐博客 : 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 .

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

    东北日出西边雨 道是无情却有情
  • 相关阅读:
    清理计算机硬盘
    DIY-组装
    go函数类型的使用
    go同步互斥锁
    Go读写文件
    go mod
    go html
    channel
    arp和rarp协议
    自己实现的反射
  • 原文地址:https://www.cnblogs.com/ccut-ry/p/8824469.html
Copyright © 2020-2023  润新知