- 数据结构 树状数组套主席树 结构详解
- 一、简述
- 二、详解
- 1.结构理解
- 2.区间修改
- 3.区间第 k k k大查询
- 三、板子
主席树主要用来解决静态区间第 k k k大的问题,它本身并不支持动态修改,也就是不支持动态区间修改。
如果我们需要进行动态区间修改,那么就需要一些辅助的数据结构进行修改。这里就需要引出我们的树套树结构。本篇博客针对树状数组套主席树的结构原理进行讲解。
使用树状数组套主席树解决静态区间第 k k k大的问题,其基本思想是在根节点记录数组上建立树状数组,使得树状数组的每个节点都表示一棵主席树。那么通过树状数组就可以找到对应需要修改的主席树并对节点进行修改。
二、详解 1.结构理解首先来看一个主席树的结构图:
我们在根节点上建立树状数组:
那么实际上存放根节点编号的
r
o
o
t
root
root数组就是一个树状数组。注意上图并没有表示出实际的结构,仅是方便理解。
这里需要说明的是:所谓的在根节点上建立树状数组,实际上是嵌套在主席树建树外层的,也就是说我们会按照树状数组的的过程去执行主席树的更新操作。建树操作可以描述如下:
for(int i = 1; i > a[i];
for(int j = i; j
关注
打赏
- 回坑记之或许是退役赛季?
- [LCT刷题] P1501 [国家集训队]Tree II
- [LCT刷题] P2147 洞穴勘测
- 2022-2023 ICPC Brazil Subregional Programming Contest VP记录
- [线段树套单调栈] 2019-2020 ICPC Asia Hong Kong Regional Contest H.[Hold the Line]
- The 2021 ICPC Asia Nanjing Regional Contest E.Paimon Segment Tree 区间合并线段树/维护矩阵乘法
- CF580E - Kefa and Watch 线段树维护哈希
- HDU5869 Different GCD Subarray Query 离线查询/区间贡献
- 27.CF1004F Sonya and Bitwise OR 区间合并线段树
- 26.CF1000F One Occurrence