
线段树
文章平均质量分 84
Brightess
毕业于湖南城市学院
目前在某游戏大厂搬砖(
展开
-
牛客竞赛字符串专题 NC237664 Typewriter(SAM + 树上倍增 + 二分 + 线段树优化dp)
本题主要考察了如何用 SAM,以及如何求 SAM 每个节点 right 集合的 min / max。很有价值的一道串串题。原创 2023-04-18 22:27:21 · 751 阅读 · 0 评论 -
树链剖分思想讲解 + AcWing 2568. 树链剖分(dfs序 + 爬山法 + 线段树)
树链剖分原创 2022-07-17 10:12:39 · 562 阅读 · 0 评论 -
The 15th Chinese Northeast Collegiate Programming Contest D-Lowbit(势能线段树 吉司机线段树)
势能线段树原创 2022-07-08 18:42:21 · 296 阅读 · 0 评论 -
Codeforces Round #791 (Div. 2) B - Stone Age Problem(懒标记实现区间赋值)
题目来源B Stone Age Problem点此进入题面题意:实现 区间赋值,区间查询思路:区间赋值,显然要用到懒标记,即编写 pushdown 函数区间查询,编写 pushup 函数具体细节见代码。代码:#define _CRT_SECURE_NO_WARNINGS 1#pragma GCC optimize("Ofast")#pragma GCC optimize("inline")#include<bits/stdc++.h>using namespace原创 2022-05-18 12:22:09 · 232 阅读 · 0 评论 -
2021年 广工第十五届文远知行杯 D-动态序列(Lazy_tag 线段树 区间加 区间乘 序列头尾加)
题意:本题涉及到 区间修改 单点修改 单点查询,因此需要 pushdown 函数,又由于没有 区间查询,因此无需 pushup。思路:因为有向 序列头部和尾部插入操作,所以我们要在 初始化 上做一下手脚,总共有 1e5 个数,1e5 个操作询问,即可能为 1e5 个向前插入 或者 1e5 个向后插入。因此我们总共开 3e5 * 4 的空间(此时 存储线段树的结构体数组 t 则要开 3e5 * 4 * 4 的空间),从 1e5 + 1 到 1e5 + n 为 初始序列 位置。用 st 和 e...原创 2022-05-12 22:38:51 · 224 阅读 · 0 评论 -
2022牛客寒假1 中位数切分(推结论 or 线段树优化dp + 前缀和)
题意:给定一个 长为 n 的数组 a 和 一个整数 m,你需要将其 切成连续的若干段,使得 每一段的中位数 都 大于等于 m,求 最多可以划分成多少段。思路:这是一道十分有趣的题目,预期的简单解法 O(n) ,复杂解法 O(nlogn) 。一、简单解法:记 数列中 ≥ m 的数字 有 cnt1 个,< m 的数字 有 cnt2 个,则 答案为 cnt1 - cnt2,该值 ≤ 0 时输出 -1证明一(严谨):记 f(l, r) 为 原数组中 a[l],...,a[r] 一段中的元...原创 2022-04-29 22:45:28 · 716 阅读 · 2 评论 -
2022牛客寒假1 炸鸡块君与FIFA22(做法二:线段树)
题意:如题。思路:我们注意到 起始分数若在 % 3 意义下相等(即这些起始分值 模 3 结果一致),则 经历 [l, r] 一段后分数的变化量是一个定值(重要)既然之前有用 ST表 解决过这个问题,那么 线段树 同样可以解决这个问题。我们可以利用 线段树 这一数据结构维护 [1, n] 整个区间 及其 所有子区间,在不同的模 3 结果之下造成的 分数变化量。依据题意,本题只需要进行区间修改,因此无需懒标记pushdown操作,只需要pushup操作即可。设线段树中的节点为“node”,先...原创 2022-04-26 22:47:37 · 879 阅读 · 0 评论 -
线段树蓝书讲解 + 经典例题AcWing 1275. 最大数
线段树介绍线段树是一种基于分治思想的二叉树结构,用于在区间上进行信息统计。与按照**2的次幂进行划分的树状数组相比,线段树则是一种更为通用**的数据结构:①线段树每个节点都代表一个区间②线段树的根节点是唯一的,代表的区间是整个统计范围,如:[1, N]③线段树每个叶子节点都代表一个长度为1的单位区间[x, x]④对于每个内部节点[l, r],其左儿子是[l, mid],右儿子是[mid+1, r],其中mid=l+r>>1(即**(l+r)/2向下取整**)区间视角下的线段树:原创 2022-02-14 23:53:38 · 816 阅读 · 0 评论 -
AcWing 245. 你能回答这些问题吗(线段树)
线段树好容易段错误啊。。干脆叫线段错误树算了!如果想复习一下线段树,戳这:线段树蓝书讲解题意:思路:本题依据题意需要进行单点修改,因此无需懒标记pushdown操作,只需要pushup操作即可。对于查询区间内部的最大子段和,我们需要想想每个节点内部需要存储哪些信息 。设线段树中的节点为“node”,我们显然最先应该存储区间的左、右端点:l、r,因为线段树本质上是一棵由区间作为节点的二叉树。同时,依据题意还应该存区间内部的最大连续子段和,我们用total_max表示,简写为tmax。我们..原创 2022-02-15 19:49:45 · 412 阅读 · 2 评论 -
AcWing 246. 区间最大公约数(线段树 差分 辗转相除)
[//]: # (打卡模板,上面预览按钮可以展示预览效果 ^^)题意:思路:题目中的要求是 区间修改:整个区间都加上一个数 和 区间查询:查询一段区间中的最大公约数。对于区间修改,我们可以将原数组变换为差分数组,因此可以将区间修改转化成了线段树基本操作之一的单点修改。对于原数组求最大公约数,我们根据辗转相除法可以得知:gcd(a[1], a[2], a[3], ..., a[i-1], a[i]) = gcd(b[1] = a[1], b[2] = a[2]-a[1], ..., b[i] ..原创 2022-02-16 15:44:16 · 530 阅读 · 1 评论 -
带懒标记的线段树讲解 + 例题AcWing 243. 一个简单的整数问题2
算法介绍在线段树的 “ask区间查询” 指令中,每当遇到被询问区间[L,r] 完全覆盖的节点 时,可以立即把 该节点上存储的信息 作为候选答案 返回。可以证明,被询问区间[L,r]在线段树上会被分成O(log N)个小区间(节点),从而在 O(log N)的时间内求出答案。不过,在 “modify区间修改” 指令中,如果某个节点被修改区间[L,r]完全覆盖,那么 以 该节点为根 的 整棵子树 中的 所有节点存储的信息 都会发生 变化,如果 逐一更新,将使得 一次区间修改指令 的 时间复杂度 增原创 2022-02-16 23:08:12 · 557 阅读 · 1 评论