![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
线段树
不可知论大祭司
Know how to solve every problem that has been solved.
展开
-
First element at least X - 2
code#include <iostream>#include <cctype>#include <cstring>#include <cstdio>#include <vector>#include <set>#include <algorithm>#define forn(i, n) for (int i = 0; i < int(n); i++)using namespace std;usi原创 2021-03-24 23:11:33 · 115 阅读 · 0 评论 -
【CFcourse】First element at least X
link同上次一样,不同的是这次维护的是最大值。code#include <iostream>#include <cctype>#include <cstring>#include <cstdio>#include <vector>#include <set>#include <algorithm>#define forn(i, n) for (int i = 0; i < int(n); i++原创 2021-03-24 11:16:48 · 112 阅读 · 0 评论 -
【CFcourse】A. Segment with the Maximum Sum
In this problem, you need to write a segment tree to find the segment with the maximum sum.linkcode#include <iostream>#include <cctype>#include <cstring>#include <cstdio>#include <vector>#include <set>#include原创 2021-03-24 10:28:26 · 181 阅读 · 0 评论 -
C. Number of Minimums on a Segment
link同时维护线段树区间最小值和最小值的数量code#include <iostream>#include <cctype>#include <cstring>#include <cstdio>#include <vector>#include <set>#include <algorithm>#define forn(i, n) for (int i = 0; i < int(n); i++.原创 2021-03-24 00:21:06 · 148 阅读 · 0 评论 -
【POI2014】KUR-Couriers 主席树
LuoguP3834 题目链接分析代码题目链接传送门分析给一个长度为 n 的正整数序列 a。共有 m 组询问,每次询问一个区间 [l,r]是否存在一个数在 [l,r] 中出现的次数严格大于一半。如果存在,输出这个数,否则输出 0。刚刚学主席树,与区间地k大类似,只需要把k变成严格大雨区间长度一半的数,分别统计小于和大于mid的数字的个数,如果这个数比k小的话就不需要继续向下访问了,由于是用vector存离散化后的结果的,要注意一下下标。代码#include <iostream>#原创 2020-12-20 21:17:20 · 123 阅读 · 0 评论 -
【LuoguP3373】线段树模板(区间加法,乘法)
概述已知一个数列,你需要进行下面三种操作:将某区间每一个数乘上 x将某区间每一个数加上 x求出某区间每一个数的和链接传送门分析要维护乘法和加法的两个标签,注意乘法和加法优先级的问题,比如在push_down的过程中,在乘法和加法同时存在的时候,儿子的add标签应该是先乘上父亲的mul标签,然后再加父亲的add标签,应为原先的加法在乘法的过程中也参与了乘法运算。代码845ms,很快啊。#include <iostream>#include <cstdio>#原创 2020-12-17 08:45:29 · 162 阅读 · 0 评论 -
【USACO10FEB】Slowing down G
Slowing down G题目描述链接分析代码题目描述每天Farmer John的N头奶牛(1 <= N <= 100000,编号1…N)从粮仓走向他的自己的牧场。牧场构成了一棵树,粮仓在1号牧场。恰好有N-1条道路直接连接着牧场,使得牧场之间都恰好有一条路径相连。第i条路连接着A_i,B_i,(1 <= A_i <= N; 1 <= B_i <= N)。 奶牛们每人有一个私人牧场P_i (1 <= P_i <= N)。粮仓的门每次只能让一只奶牛离开。耐原创 2020-12-12 14:07:54 · 156 阅读 · 0 评论 -
【LuoguP4145】上帝造题的七分钟2(线段树区间开平方根)
题目大意线段树,支持对区间内每个数开平方2,下去整。区间和查询题目链接传送门分析由于是对每个数取平方根,这样的懒标签是在是不好打,只好考虑单点修改了,时间复杂度为nlogn,n最大是10的5次方,勉强可以接受。这里我们多维护一个区间最大值,如果区间最大值是1的话就不用修改了,实际上,如果对一个较大的数反复开根号的话是不需要几次的就可以开到1,所以这个最大值的维护可以帮我门在操作较多时省区不少没必要的运算。思路和上一题一样,就是一些局部优化。要注意这题l可能大于r,这时候题目要求l和r交换原创 2020-12-12 09:36:12 · 149 阅读 · 0 评论 -
【CF438D】 The Child and Sequence 线段树取模
The Child and Sequence题目概述题目链接分析代码题目概述给你一串数字,支持一下几种操作区间和查询区间取模单点修改题目链接传送门分析显然是线段树,应为没有区间修改这类的操作,我们于是省去了一个懒标签和pushdown的操作,关键是如何取模,这里维护了一个区间最大值,如果最大值小于模的化直接返回,相当于做了一些局部优化,数字还挺多,建议快读。代码#include <iostream>#include <algorithm>#include原创 2020-12-11 23:36:56 · 144 阅读 · 0 评论 -
【hud3966】树剖模板05
题目大意树剖裸题,支持路径上加,单点修改题目链接传送门代码要注意有多组输入,每次都要初始化,测试样例只给了一组,有些迷惑性。#include <iostream>#include <algorithm>#include <cstring>#include <cstdio>#include <cctype>#define mid (l + r >> 1)using namespace std;const int原创 2020-12-10 22:41:09 · 74 阅读 · 0 评论 -
【LuoguP4114】Qtree1树剖04
边权化点权题目描述题目链接解析代码测试样例题目描述给定一棵树,支持如下操作CHANGE i t 把第 i 条边的边权变成 tQUERY a b 输出从 a到 b的路径上最大的边权。当a = b时,输出 0题目链接传送门解析和上一篇博客的方法一样,而且本题只涉及一个懒标签,细节和代码量都更少,附上上一篇的链接树链剖分03代码#include <algorithm>#include <cstdio>#include <cctype>#defi原创 2020-12-04 14:57:20 · 97 阅读 · 0 评论 -
【洛谷P4315】月下毛景树 树链剖分03
P4315 月下“毛景树”题目大意题目链接分析代码准备阶段dfs线段树核心操作建树实现区间加实现区间和单点修改区间最大值查询树上操作主函数完整代码测试样例题目大意Change k w:将第k条树枝边的边权改变为w。Cover u v w:将节点u与节点v之间的边上的边权全改变为w。Add u v w:将节点u与节点v之间的树枝上边的边权都增加w。Max u v:询问节点u与节点v之间边权。题目链接传送门分析可以很快意识到这是一题树链剖分题,不过和传统的树链剖分不一样,本原创 2020-12-03 22:07:10 · 229 阅读 · 0 评论 -
【洛谷P3383】魔法树 树剖模板02
LuoguP3833魔法树题目概述题目链接分析代码测试样例题目概述给你一棵树,节点出始权值是0.要求实现两种操作路径u到v上所有节点的权值增加某个值询问操作,询问以u为根的所有子树的权值之和(包括u自身)题目链接传送门分析树链剖分,模板题,我只会做模板题,(笑附上上一篇模板的链接传送门本题由于点权的初始值时0,建树操作实际上可以不进行,不过还是走一下程序比较完整。有一点需要注意的是节点的编号是从0开始的,如果不做任何处理的话会对链式前向星加边以及dfs时造成影响,方便起见,我们将每原创 2020-12-03 15:09:38 · 123 阅读 · 0 评论 -
【洛谷P3187】树上操作 树剖模板01
LuoguP3178题目大意原题链接做法代码一些吐槽题目大意有一棵点数为 N 的树,以点 1 为根,且树点有边权。然后有 M 个操作,分为三种:操作 1 :把某个节点 x 的点权增加 a 。操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 a 。操作 3 :询问某个节点 x 到根的路径中所有点的点权和。原题链接传送门做法链式前向星加边两次dfs,第一次算出父节点,子树大小,深度,重儿子,第二次算出每个点的dfs序号,每一条链的链首建线段树树链剖分代码#include原创 2020-12-03 11:04:25 · 987 阅读 · 6 评论 -
【CF877E】 树上的开关问题
CF877EE. Danil and a Part-time Job做法代码E. Danil and a Part-time Job题目链接做法先dfs一遍原来的树,求出每个节点dfs先后顺序,使一个节点u和它的子节点的dfn在一个连续的,长度为size[u]的区间内,建立线段树。对于懒标签,每次于1进行异或从而改变开关的状态代码#include <cstdio>#include <cctype>#include <algorithm>#define m原创 2020-12-02 18:41:02 · 218 阅读 · 1 评论