主席树
文章平均质量分 68
荼白777
这个作者很懒,什么都没留下…
展开
-
P4197 Peaks(主席树+Kruskal重构树+倍增)
传送门前缀知识Kruskal重构树题面思路看到困难值小于等于x就应该想到用Kruskal重构树了;首先我们构建一颗Kruskal重构树,然后询问是问我们从某个点uuu出发,不超过困难值hhh,那么这个过程我们可以用倍增来解决;接着看到第kkk大,那么维护第kkk大可以用很多数据结构;假设当前不超过困难值hhh这个点为rtrtrt,因为每个rtrtrt都不同,维护的区间也不同,因此是一个动态区间第k大,因此我们考虑主席树来解决;我们用一个数组range(i)(2)range(i)(2)r原创 2022-04-15 20:54:55 · 488 阅读 · 0 评论 -
Descent of Dragons —— 主席树
题面题意要求我们支持两种操作将区间[L,R][L,R][L,R]等级为xxx的龙升级为x+1x+1x+1求区间[L,R][L,R][L,R]等级最高的龙思路看到这种改变等级(版本)的,不难想到可持久化数据结构;再看到区间操作,那就想想主席树怎么搞吧;首先,类似于权值线段树,每个叶子结点代表一个数;在版本000的时候,每个位置都存在龙;对于操作一来说,这里跟我们写的主席树板子不同;在主席树板子中,每个旧版本往往只是给新版本做一个工具版本,也就是只使用一次(比如最常见的,每插原创 2021-11-14 00:10:23 · 600 阅读 · 0 评论 -
HH的项链 —— 主席树做法
题面传送门思路这道题要问区间内数字的种类数,和我们板子中主席树解决区间某个数出现的次数不同;因此我们需要转化一下再套板子;首先考虑这样一个结论;对于询问的区间[L,R][L,R][L,R],如果某个数字出现了多次,因为我们只能计算一次;那么我们只关心最右边的这个数字(记为uuu);举个例子,比如当前询问的区间为[1,2,3,1][1,2,3,1][1,2,3,1];编号为111的这个111将被编号为444的这个111取代,我们只需要考虑编号为444的这个111的贡献;因为我们如果要原创 2021-11-13 14:31:03 · 915 阅读 · 0 评论 -
P3939 数颜色 —— 主席树简单变形
题面数颜色思路因为这道题要求区间权值出现次数,很自然的就想到主席树;这样操作一就解决了;因为主席树维护的是一个前缀和一样的东西;因此对于操作二来说,我们只需要修改xjx_jxj位置上的值即可;因为这道题卡常,因此要用快读快写;Code#include <iostream>#include <cstdio>#include <unordered_map>#include <vector>#include <algorith原创 2021-10-22 19:55:35 · 111 阅读 · 0 评论 -
主席树模板&可持久化数据结构介绍
引言一、可持久化数据结构的前提是其拓扑排序是不变的;比如线段树,我们改变的总是它维护的数值,他的结构一旦定下来就不会变了;二、可持久化的核心思想是类似git操作,我们维护版本间的差异,而不是维护整个版本;主席树主席树又称可持久化线段树,其持久化的核心思想和引言的一致;也就是我们每修改一个节点,我们就创建一个新的副本,并在副本的基础上进行修改;如图所示,假设我们修改了1,2,4,81,2,4,81,2,4,8这条链,我们就创建这条链的一个备份,并且在这条链上修改;每个版本我们都认为他原创 2021-10-05 17:08:11 · 301 阅读 · 1 评论 -
普通线段树&主席树&权值线段树的区别
普通线段树这种线段树是我们最常接触的,其叶子节点维护的是区间信息,比如区间和、区间最大值、区间最小值;权值线段树权值线段树其叶子节点表示某个值出现的次数;由于值域范围通常较大,权值线段树会采用离散化或动态开点的策略优化空间;利用权值线段树可以方便地求出整体第kkk大或者第kkk小查询第kkk大的时候,如果右子树的总和大于等于kkk,那么就说明答案在右子树,否则在左子树;去搜左子树的时候,我们需要用kkk减去右子树的大小;同理,查询第kkk小的时候,如果左子树的总和大于等于kkk,那就说明原创 2021-10-05 17:55:25 · 318 阅读 · 0 评论