线段树
文章平均质量分 52
KaaaterinaX
我是废物
展开
-
可持久化数据结构
可持久化数据结构指的是支持查询所有历史版本的一种数据结构,一般情况下只有更新信息但整体拓扑结构不变的数据结构能实现可持久化。 可持久化线段树(主席树) 【模板】第K小数(主席树) 题意简而言之就是给定序列中的一个区间,输出这个区间第k大的数。 这是一个非常经典的问题,运用了可持久化线段树结构以及树上二分的思想。 可以把思路拆开来看。 树上二分: 查询某个区间内第k大的数,可以把有序区间分成两半来看,如果在mid之前的数比k个多,那么要求的数一定在mid之前,继续进行同样的操作直到区间只包含一个数。 线段树:原创 2021-08-21 17:24:25 · 82 阅读 · 0 评论 -
线段树笔记的补充(一些不太一样的线段树)
zkw线段树 线段树的另外一种写法,可以不用递归,代码简短干净。 zkw线段树巧妙利用了完全二叉树父子节点编号的关系,从叶节点出发,可以一路找到所有父节点。 这种线段树建树与查询都从叶节点开始,所以可以直接查询叶节点信息。 要把叶节点全部放在树上的同一层 基础建树 void build(){ while(m<=N) m<<=1; for(int i=m;i<=m+N;i++){ tr[i]=1; } for(int i=m-1;i;i-原创 2021-08-18 16:00:10 · 138 阅读 · 2 评论 -
线段树常用技巧模版(刷题篇)
这篇博客相当于线段树学习博客的补充。 原文链接:2021-07-27 重见线段树 一、双tag线段树 这种时候,如果不做特殊处理,tag添加的顺序将影响最终结果,十分麻烦。 由于操作含有乘法和加法,并且先乘后加与先加后乘结果不同。所以标记下传的时候要这样处理: void pushdown(int u){ //先乘后加,并下传懒标记 tr[u<<1].sum=(tr[u<<1].sum*tr[u].mu)%p; tr[u<<1].sum=(原创 2021-07-28 16:00:54 · 168 阅读 · 2 评论 -
2021-07-27 重见线段树
引入: 线段树是一种神奇的数据结构,支持在线高效率(lgn)区间/单点修改/查询。下面用一个经典例题引入线段树基本模版。 ———————————————————————————————— 有一个长度为n(n<=1e5)的数组,有m(m<=1e5)次操作,操作涉及修改数组中某个元素的值以及查询数组连续区间内的和。 ———————————————————————————————— 这个题如果把数据量缩小,就是一个简单暴力题,但是数据量上来了,就需要用到线段树了。 随便揪一张图片: 这个图可以很好地原创 2021-07-27 18:37:20 · 153 阅读 · 0 评论