• 2024-08-29主席树
    主席树主席树全称是可持久化权值线段树,即对权值开线段树,参见知乎讨论。引入先引入一道题目:给定\(n\)个整数构成的序列\(a\),将对于指定的闭区间\([l,r]\)查询其区间内的第\(k\)小值。你该如何解决?一种可行的方案是:使用主席树。主席树的主要思想就是:保存每次插入操作
  • 2024-08-18可持久化线段树(主席树)
    区间第k大/小问题洛谷P3834好吧,区间问题,考虑线段树でも,线段树能求解的问题须是大问题的解可以从小问题的解合并而来,显然,第k大/小问题不满足,不能直接用一颗树解决考虑用多颗树怎么想到的?我要是想到了我就成主席了首先,烧烤一下如何用线段树求1-i的第k小值烧烤ing……以
  • 2024-08-16主席树做题记录
    主席树做题记录。主席树,即可持久化权值线段树。P3248[HNOI2016]树难爆了这题。题目中会多次把模板树的某个子树放到大树上的某个节点下,我们把这一整个子树看作一个大节点,把模板树、大树分别维护。具体的,模板树上需要倍增维护两点之间的距离,dfs序。大树上需要维护:大树上
  • 2024-08-07主席树模板
    template<classNode>structPersidentSegmentTree{#definelc(u)tr[u].l#definerc(u)tr[u].r#definesum(u)tr[u].sconstintn;inttot=0;vector<Node>tr;vector<int>root;PersidentSegmentTree():n(0){}
  • 2024-08-02主席树
    主席树(可持久化权值线段树)这是一种用于处理一段数(e.g.1,2,3,4,5)在一个序列的某个区间[l,r]上出现几次/区间k小/查询历史版本的数据结构前言:权值线段树权值线段树可以维护某个区间内数组元素出现的次数。1.主席树是什么?对于一颗权值线段树,我们要往里面添加n个数字,我们知道,这很
  • 2024-07-23主席数学习笔记
    笛卡尔树太难了啊。主席树可持久化数据结构\((\text{Persistentdatastructure)}\)总是可以保留每一个历史版本,并且支持操作的不可变特性\(\text{(immutable)}\)。意思就是可以查询历史值,对于每一个历史版本\(k\),都是经过第\(k-1\)个版本、修改重连\(\logn\)个节点
  • 2024-05-30主席树
    引入我们考虑对于一个长度为\(n\)的序列去找第\(k\)小,如果不用排序的话(虽然用了桶),可以利用一个桶匠所有数纪录下来,然后在桶上做二分即可(不会这个都不会吧),那么对于一个区间的话,我们便可以在区间\([l,r]\)上开桶然后做二分,不过这个桶我们该如何维护呢,首先我们想到前缀和,因为
  • 2024-05-25学习笔记-主席树
    学习笔记-主席树主席树,就是可持久化权值线段树,也叫函数式线段树引入考虑如下问题:给定一个数列,查询其中第k大值显然,我们可以建一棵权值线段树,直接在上面二分就好了,即对于每个结点,查看它左子树的结点数量是否大于k,设为\(sum\)如果\(sum\gek\),则第k个结点在其左子树中,否则
  • 2024-04-23主席树的简要讲解
    区间第k小值主席树是解决动态查找序列上[l,r]区间中的第k小值的一个数据结构核心思想:动态开点(后面会讲)传统线段树都是值域线段树其实意思就是每个节点都存的是序列上[l,r]的一个区间和,但是考虑我们需要动态处理区间的不是最值,故换一种线段树主席树一般用的是权值线段树就是把[
  • 2024-04-13主席树的板子题
    题解方法1.可持久化线段树(主席树),代码有详细注释做法:先把值离散化在数值上建立线段树,维护每个数值区间中一共有多少个数问题1:如何求整体第K小数?答:二分,如果0~mid中有cnt数,cnt>=k,递归左边,如果cnt<k,递归右边,找k−cnt小的数。时间复杂的logn问题2:求【1,R】这个区间的第K
  • 2024-02-04主席树
    主席树定义可持久化的线段树实现voidmkrt(int&p,intq){inttmp=mknode();t[tmp]=t[q];p=tmp;}voidpushup(intp){t[p].dat=t[t[p].ls].dat+t[t[p].rs].dat;}voidmodify(int&p,intL,intR,intx,intv){if(!p)p=mknode();if(
  • 2024-01-23主席树(可持久化线段树)
    主席树前言主席树也是一种数据结构,是线段树的进阶,作用是可以保留历史版本,支持回退,就是回到之前某个未修改的状态。就像我们在写博客时如果误删了重要的内容,就可以用Ctrl+z撤回一次操作,也可以用Ctrl+Shift+z还原我们撤回的操作,这就需要存下每次编辑的操作。基本原理可
  • 2023-12-292023-2024元旦联欢会小记
    Day-2gg说放假,终于能确定回来了。Day-1开始摆烂,但是还是在学习淀粉质。怎么说看了付姐的朋友圈,看到大家在包饺子,又错过一个活动怎么说。gg说开茶话会。高一同学:茶话会?不,是鸿门宴。真的是晚会!唱了首《稻香》。感觉回到了高一在班里一起唱歌。晚会在情侣合体的时候达到了
  • 2023-12-20主席树
    structZXS{ inttot=0; TREEtr[N*32]; intxin(intp){ tot++,tr[tot]=tr[p]; returntot; } voidup(intp){ intls=tr[p].ls,rs=tr[p].rs; tr[p].val=tr[ls].val+tr[rs].val; } intbuild(intp,intl,intr){ p=++tot; if(l==r){ tr[p].val=0;
  • 2023-12-13浅谈一类边权带指数的图论问题
    偶然看到了这道题,求的是边权为\(n^w\)次方时树上的第\(k\)小路径,觉得这类题目很有意思,就研究了一下。1.CF464ETheClassicProblem题意:给一个无向图,每条边的边权是\(2^{w_i}\),求\(s\)到\(t\)的最短路。思路:首先,我们可以把距离看成一个二进制数,那么我们需要能支持快
  • 2023-11-04详解主席树与二维数点问题
    主席树与二维数点问题前言:自己在网上搜索了很久,都没有看到具体是怎么维护的,下课问了下,一下就点醒了。正文:先考虑主席树和二维数点有什么关系。我们可以将y轴看成一个时间轴。我们查询y1-y2之间的数字时,其实就是查询这些版本下的x1-x2的区间和,最后由于可加性,直接差分相减即可
  • 2023-10-30主席树
    //动态开点可持久化权值线段树#include<bits/stdc++.h>usingnamespacestd;constintN=2e5+5;structSegmentree{intls,rs,sum;}t[N<<5];intrt[N],tot=0,n,m,a[N],b[N],p;//p含义为修改点voidbuild(intp,intl,intr){p=++tot;if(l==r)return;
  • 2023-10-29BLOG1029<-主席树,
    这个比splay好学多了(主席树就是把每次修改的版本保留下来,版本就是线段树曾经的一个状态。如果打暴力的话可以想把每个状态的线段树都保留下来,炸飞了。主席树单点修改的话就是发现了每次修改只改了包含这个点的层,线段树上,这是\(\logn\)级的,我们可以只创建这些新节点。每次修
  • 2023-10-25主席树(更新)
    主席树学习(无详细讲解过程,因为思想很简单)目录主席树学习背景:可持久化线段树(主席树)模板:静态区间第k大更多应用:(其实就是加了一点其他模板)和树dfs一起出:一些总结:更新内容(2023/10/25)区间修改(持久化tag)背景:sensi:今天咱们做一下优化dp,你们看看这个简单题。https://www.luogu.c
  • 2023-10-24主席树初步
    什么是主席树主席树即可持久化线段树这边其实我目前感觉就是支持查询历史版本的线段树原理每当线段树修改时,维护其过去的版本,将其复制下来(然后就MLE了改进:对集合的每一个版本维护一个单独的根,在修改数据时,只复制树的一部分(复制一张别人的图Orz)建树类似
  • 2023-10-13主席树
    权值线段树思路:现将数值离散化每个节点存的是值在\(l\)~\(r\)之间的数的个数,用线段树维护作用:求\(k\)小值或\(k\)大值查某一数值的排名查询数组排序查前驱、后继求逆序对相比平衡树:码量小、简单P1801黑匣子离散化:sort(alls.begin(),alls.end());alls.eras
  • 2023-09-28开源大咖说 | openEuler: 技术引领,走向世界
    编者按:2023年9月19日,为期3天的欧洲顶级开源峰会OSSUMMIT2023(OpenSourceSummit)在西班牙举办。作为开放原子开源基金会旗下的项目,openEuler作为钻石级别赞助参会。这也是openEuler和OpenAtom基金会首次联袂在国际舞台上进行展示和亮相。我们很荣幸邀请openEuler技术委员会委员熊伟
  • 2023-08-12主席树
    详细介绍看心情可能会补放这就是想方便参考顺便水篇博客我们要维护一个数组的信息,但是我们也要查询历史信息大概思想是不同线段树相同的部分共用点每次修改都复制原来点再进行修改,这样肯定不冲突通过记录不同版本根节点编号来做索引其实写起来跟普通线段树的区别就是修改的
  • 2023-07-19主席树学习笔记
    Tip:建议完成LuoguP3919后阅读。目录模板:静态区间\(k\)小值模板:动态区间\(k\)小值BZOJ3207:花神的嘲讽计划疯狂的颜色序列SPOJ10628:CountonatreeLuoguP3302森林模板题:静态区间\(k\)小值思路引导首先我们想一想,如何用线段树求数列\(k\)小值。我们可以建
  • 2023-07-06主席树
    主席树——可持久化线段树,权值线段树运用:在某个历史版本上修改某一个位置上的值访问某个历史版本上的某一位置的值 3.区间内k小数开点——前缀和思想一.P3567[POI2014]KUR-Couriers#include<cstdio>#include<algorithm>usingnamespacestd;constintN=