
线段树
oier_forever
这个作者很懒,什么都没留下…
展开
-
Codeforces 833B 题解(DP+线段树)
题面B. The Bakery time limit per test2.5 seconds memory limit per test256 megabytes inputstandard input outputstandard outputSome time ago Slastyona the Sweetmaid decided to open her own bakery!...原创 2018-05-14 21:40:07 · 235 阅读 · 0 评论 -
HDU 6070题解(二分+线段树)
题面传送门 此题的题意不是很清晰,要注意的一点是在区间[L,R]中,默认题目编号最后一次出现的时候是AC的 比如1 2 1 2 3 ,在区间[1,4]中,第3次提交时AC第1题,第4次提交时AC第2题,故比例为2/4=0.5 所以此问题可以转化为 给定一个序列,定义区间[l,r]的值为cnt(l,r)r−l+1cnt(l,r)r−l+1\frac{cnt(l,r)}{r-l+1},(c...原创 2018-06-11 16:39:48 · 224 阅读 · 0 评论 -
Codeforces 396C (DFS序+线段树)
题面传送门 题目大意: 给定一棵树,每个点都有权值,边的长度均为1,有两种操作 操作1:将节点u的值增加x,并且对于u的子树中的任意一个点v,将它的值增加x-dist(u,v)*k, dist(u,v)表示u,v之间的距离 操作2:查询节点u的值分析这类题目需要用到一个重要的思想:将树上操作转化为区间操作 通过DFS序我们可以实现这一点. 对于每个节点x,我们记录它在前序遍...原创 2018-07-29 16:04:45 · 371 阅读 · 1 评论 -
Codeforces 916E(思维+dfs序+线段树+LCA)
题面传送门 题目大意:给定初始根节点为1的树,有3种操作 1.把根节点更换为r 2.将包含u,v的节点的最小子树(即lca(u,v)的子树)所有节点的值+x 3.查询v及其子树的值之和分析看到批量修改子树,我们想到将树上操作转化为区间操作 通过DFS序我们可以实现这一点. 对于每个节点x,我们记录它在前序遍历中的位置l[x],再一次回到x时的序号r[x],则x及其子树的区...原创 2018-07-29 17:11:21 · 300 阅读 · 1 评论 -
BZOJ 1878(离散化+线段树)
题面传送门分析首先我们观察到区间范围较大,而区间个数较少,考虑离散化,将所有询问按照右端点进行排序 离散化之后研究区间颜色个数变化的规律 当我们处理到第a[i]个段时,设a[i]上一次出现的地方为last[a[i]],则last[a[i]]之前的颜色出现次数不受影响. 首先遍历右端点范围r,用线段树维护每一位到r的区间中有多少种颜色,记为c 则处理到第a[i]个段时,将(las...原创 2018-08-22 20:06:12 · 143 阅读 · 0 评论 -
BZOJ 3252题解(贪心+dfs序+线段树)
题面传送门分析此题做法很多,树形DP,DFS序+线段树,树链剖分都可以做 这里给出DFS序+线段树的代码 我们用线段树维护到根节点路径上节点权值之和的最大值,以及取到最大值的节点编号x 每次从根节点走到x,将点归0,再把最大值累加 然而,修改操作怎么做呢? 这里当然可以树剖,但是还有代码量更小的做法 从x往父亲跳,每次将子树中的节点值都-v(v为当前节点的权值,当前节点权值...原创 2018-08-22 20:17:21 · 197 阅读 · 0 评论 -
BZOJ 4552(二分+线段树+思维)
题面传送门分析此题是道好题! 首先要跳出思维定势,不是去想如何用数据结构去直接维护排序过程,而是尝试二分a[p]的值 设二分a[p]的值为x 我们将大于x的数标记为1,小于等于x的数标记为0 则整个序列只由01组成,记为b 将一个区间升序排序,则相当于将1全部移到右边,0全部移到左边,降序排序反之 例: a={1,6,5,2,4,3}.x=4 标记后的序列b为{0,1,...原创 2018-08-29 17:03:48 · 209 阅读 · 0 评论