今天我们说说线段树。 我个人还是非常欣赏这种数据结构的。(逃)因为它足够优美,有递归结构,有左子树和右子树,还有二分的思想。 emm这个文章打算自用,就不写那些基本的操作了... 1° 简单的懒标记(仅含加法) 当我们进行区间修改(比如同时加上一个数)时,我们现在也许暂时不用它,可以当需要用的时候再 ...
分类:
其他好文 时间:
2018-10-01 20:44:52
阅读次数:
182
主要要注意lowbit函数 然后add时向右跑,check时向左跑(此处的add只能单点修改) 若想实现区间修改,则要结合差分(不过这就只能单点查询了) 所以最强大的还是线段树了 ...
分类:
编程语言 时间:
2018-09-30 21:53:14
阅读次数:
232
单点修改 单点查询 用普通数组就能写出来 单点修改 区间查询 用线段树 树状数组; 区间修改 区间查询 用线段树 树状数组; 区间修改 单点查询 用线段树 树状数组; 建树 #include<bits/stdc++.h> using namespace std; const int maxn=1e5 ...
分类:
编程语言 时间:
2018-09-27 20:40:56
阅读次数:
293
题解: 比较好想 首先注意到如果最暴力的做法复杂度无法接受 而5000的范围基本是n^2做法了 只使用已经遍历过的点数目和当前子树中的点数目转移我们知道复杂度是n^2的 于是大胆猜测一波同一个节点为根值域是连续的 然后就可以暴力dp了 查询的时候我们可以把序列差分一下(原问题等价于 区间修改,区间询 ...
分类:
其他好文 时间:
2018-09-17 00:01:35
阅读次数:
295
分析 除了树剖没想到其他解法。 用线段树维护区间和,同时针对修改区间修改操作建立两个lazy标记,一个是$lazy_{mul}$,另一个是$lazy_{add}$,代表区间里的数都需要先乘以$lazy_{mul}$,再加上$lazy_{add}$。如果一个区间需要被重复标记,那么我们可以先把新的la ...
分类:
其他好文 时间:
2018-09-15 21:19:04
阅读次数:
168
【引言】在上一篇博客中探讨了树状数组的原理以及用法,我们知道:树状数组是一种擅长多次单点修改和区间查询的数据结构。但是我们很容易抛出这样一个问题:如果是区间修改,区间查询呢?我们来看这样一个问题: 给定一个长度为N的数列,有如下两种操作: (1) Q L R 查询区间L - R的元素总和; (2)C ...
分类:
其他好文 时间:
2018-09-14 13:15:23
阅读次数:
153
输入 每个测试点(输入文件)有且仅有一组测试数据。 每组测试数据的第1行为一个整数N,意义如前文所述。 每组测试数据的第2行为N个整数,分别描述每种商品的重量,其中第i个整数表示标号为i的商品的重量Pi。 每组测试数据的第3行为一个整数Q,表示小Hi进行的操作数。 每组测试数据的第N+4~N+Q+3 ...
分类:
其他好文 时间:
2018-09-11 21:10:46
阅读次数:
170
相关讲解资料: 树状数组:https://blog.csdn.net/qq_34374664/article/details/52787481 (线段树预备) 线段树讲解: 初学版:https://blog.csdn.net/zearot/article/details/52280189 进阶完整版 ...
分类:
其他好文 时间:
2018-09-09 20:03:50
阅读次数:
241
最短路: p4779 p1144 p1629 p2384 p3371树:最小生成树 线段树(区间修改点修改 区间询问点询问)模板 p3368 p3374dp:p1002 p1004 p1006 p1040 p1048 p1049 p1616 p1734 p1868 p1880(区间dp) p1982 ...
分类:
其他好文 时间:
2018-09-08 17:15:59
阅读次数:
138
$$SUM[x,y]=\sum_{i = 1}^{x}\sum_{j = 1}^{y}\sum_{k = 1}^{i}\sum_{l = 1}^{j}b[k][l]$$ $$=\sum_{i = 1}^{x}\sum_{j = 1}^{y}(x i + 1)(y j + 1)b[i][j]$$把有关 ...
分类:
其他好文 时间:
2018-09-04 19:02:45
阅读次数:
113