线段树与树状数组
DS:先去确定一些询问需要维护的东西,然后再去修改那边维护DS
lamentropetion
---
展开
-
【枚举区间+线段树】CF Ehu 152 E
对区间计数,按照CF惯用套路,枚举其中一个端点,对另一个端点计数。对于这道题,枚举右端点,对左端点计数。原创 2023-09-01 21:40:58 · 369 阅读 · 0 评论 -
【二维偏序】CF Edu10 D
【代码】【二维偏序】CF Edu10 D。原创 2023-08-31 17:05:57 · 240 阅读 · 0 评论 -
【树状数组优化哈希DP】CF1801 C
【代码】【树状数组优化哈希DP】CF1801 C。原创 2023-08-13 21:24:54 · 363 阅读 · 0 评论 -
【*2400 线段树】CF444 C
一次修改对区间和的贡献不能直接计算,因此我们考虑分开计算贡献,把这个区间分成几个由一种颜色构成的区间,对这些区间去产生贡献。lazy标记的含义是,给这整个区间的颜色赋值为y,那么对区间和的贡献就是abs(x-y),x为原来的颜色。在pushdown时,先去更新左右子区间的标记,然后去更新左右子区间的val,最后清空该区间的tag。在pushdown时,tag永远是为了子区间服务的,在计算本区间的val时不能用本区间的tag。在计算左右子区间的val时,记得用整个区间的tag去计算,为什么呢。原创 2023-07-10 22:33:49 · 262 阅读 · 0 评论 -
【*2200线段树Pushup】CF1567 E
【代码】【*2200线段树Pushup】CF1567 E。原创 2023-07-10 18:11:39 · 342 阅读 · 0 评论 -
【线段树】P6492 STEP
要维护区间最长子串,就需要维护左起最长子串和右起最长子串。要维护这两者,就得维护区间两端的种类。原创 2023-07-04 21:00:36 · 167 阅读 · 0 评论 -
【按位建线段树】CF242 E
对于每一列的贡献,就是:(这一列的1的个数)*(1原创 2023-07-04 19:59:50 · 236 阅读 · 0 评论 -
代码源 扫描线权值线段树 板子
这道题也用了离线的思想,将询问排序,在维护线段树的同时维护答案数组。二维数点本质上也是扫描线,即枚举一个指针,去枚举一棵线段树。在这里,枚举纵坐标,线段树维护一个横坐标区间内有多少点。原创 2023-07-04 16:40:25 · 138 阅读 · 0 评论 -
代码源 线段树模板
思路:我们需要维护的东西是序列的最小值和最小值个数这道题没有修改操作,因此不考虑修改然后考虑Pushup最小值很简单,直接取min最小值个数怎么维护呢?考虑这个区间需要维护的值如何从左右两个区间获得如果左右两个子区间的最小值相同,那么就可以直接相加否则,如果这个区间的最小值是左区间最小值,直接赋值左区间的否则就是右区间的学一学dls的代码风格,感觉很高级QwQ。原创 2023-07-03 00:59:51 · 132 阅读 · 0 评论 -
【贪心+权值线段树】代码源每日一题div1 双端队列
还有为了防止线段树越界,要和1取max,和N取min。手摸几个样例可以发现,不管怎么放,最小贡献是确定的。遍历数组,直接算两种决策的逆序对数的最小值就行了。因此可以直接计算最小贡献。原创 2023-06-12 00:28:33 · 181 阅读 · 1 评论 -
代码源每日一题div1【离线+树状数组】数数
具体地说,遍历询问的时候,可以用一个指针维护val原创 2023-06-11 11:06:53 · 141 阅读 · 0 评论 -
【容斥+扫描线】2023CCPC河南省赛 I 数正方形
【代码】【容斥+扫描线】2023CCPC河南省赛 I 数正方形。原创 2023-06-05 16:33:47 · 212 阅读 · 0 评论 -
【dfs序+线段树】求和
操作2:因为一棵子树对应序列中的一个区间,因此就是用线段树进行区间修改,区间的长度就是子树大小,因此也可以把子树的大小预处理出来。操作1:就是对序列进行单点修改,对u的位置进行修改。树上操作,考虑把树转化为序列,在序列上用DS维护。原创 2023-05-23 19:37:07 · 91 阅读 · 0 评论 -
【dfs序+线段树】P3178 [HAOI2015]树上操作
对于树上的修改操作,我们可以把树的dfs序搞出来,然后在dfs序上修改,这样就把维护树上信息变成维护序列信息了,维护序列的信息用线段树即可。操作1是对一个结点u +val,那就是对这个u的进栈的时间戳,即in[u]位置+val,对out[u]位置-val。操作2是对子树整体+val,那么就相当于对区间整体修改,区间中的数,如果是正的就+val,否则就是-val。注意,这里的dfs序是每个数仅出现2次,即进栈时记录一次,出栈时记录一次。即区间加:(区间中的所有1+区间中的所有-1)*val。原创 2023-05-23 13:48:39 · 534 阅读 · 0 评论 -
【树状数组+离线】[SDOI2009]HH的项链
因此我们在遍历询问的时候,如果一个数在之前有被访问过,就将前面那个数从1变成0,然后将该位置置1,这样询问区间内数字种类个数就可以转化成区间加了。因此考虑将询问离线处理,将这些区间按右端点排序,然后用树状数组维护一个序列。对于每个种类的数只保留其最右端的那个数的序列。相当于对于一个种类的数,只保留一个数。每次询问输出该区间内不同的数的个数。考虑保留位置最靠右边的那个。原创 2023-04-23 19:53:19 · 99 阅读 · 0 评论 -
【DS】河南省第十三届ICPC大学生程序设计竞赛 J-甜甜圈
在用线段树和树状数组之前,先去考虑好我们要维护的是哪个序列,我们需要维护的是序列的什么值。每次操作我们找出最大值的位置,贡献加上该最大值头上有几个,然后把它删除。因为他有两根,因此考虑把两根棒合并成一根,然后维护这一根就行。至于怎么去维护贡献,只需要记录上一次删除的位置即可。这样就可以直接维护了,这题用线段树和也可以做!直接模拟复杂度太高,因此考虑用DS优化。对于第一次删除,上一次删除的位置在n。那就是把这两根棒头对头放着就行。对于这道题,首先需要构造序列。我们考虑用树状数组维护。删除其实就是把1变成0。原创 2023-04-14 21:08:10 · 816 阅读 · 0 评论 -
ABC267 E - Erasing Vertices 2
我们要维护最大值,删去一个点之后,周围所有点的权值都减去中间那个点的权值,这对全局最大值的影响不能直接维护。那就是去考虑线段树了,考虑动态维护一个序列就行,删去一个点之后,修改特定编号的权值,那就是单点修改了,然后。就是先去考虑我们要维护的是什么东西,然后再去考虑修改操作对需要维护的东西的影响。但是如果先删比较小的,大的那个点可能就变小了,贡献也就可能变小。考虑它的操作,删除一个点,点周围所有点的权值都减去a[u]证明的话就是反证法,先删大的点的贡献一定不小于先删小的。这就是DS的含金量!原创 2023-04-07 00:28:17 · 225 阅读 · 0 评论 -
【板子】分块解决线段树问题
分块原创 2023-03-21 15:54:01 · 93 阅读 · 0 评论 -
【线段树应用】XOR的艺术
线段树应用原创 2023-03-19 23:51:46 · 81 阅读 · 0 评论 -
【线段树区间乘】线段树2
区间乘原创 2023-03-19 23:05:29 · 55 阅读 · 0 评论 -
【线段树应用】数据结构
线段树应用原创 2023-03-19 22:29:26 · 245 阅读 · 0 评论 -
2022湖北省赛 L 裸线段树
裸线段树原创 2023-03-18 22:50:36 · 588 阅读 · 0 评论 -
【代码源每日一题div1】树状数组 数数
树状数组原创 2023-03-09 15:12:12 · 130 阅读 · 0 评论 -
牛客练习赛109 B D
牛客原创 2023-03-03 23:06:21 · 250 阅读 · 0 评论 -
【普通线段树+小小剪枝优化】CF849div4 F
线段树原创 2023-02-04 15:41:41 · 623 阅读 · 0 评论 -
CF790 div4 F(双指针) H(逆序对)
双指针,逆序对原创 2023-01-29 15:12:06 · 347 阅读 · 0 评论 -
【树状数组+二分答案】谜一样的牛
树状数组初等应用原创 2022-11-02 23:33:47 · 131 阅读 · 0 评论 -
【树状数组】楼兰图腾
树状数组初等应用原创 2022-11-02 23:06:49 · 158 阅读 · 0 评论 -
【权值线段树+二分】Lost Cows
模板题原创 2022-08-25 18:11:25 · 194 阅读 · 0 评论