线段树
线段树遇到的问题
csu-yuuki
这个作者很懒,什么都没留下…
展开
-
HDU - 3074
题目链接 https://acm.hdu.edu.cn/showproblem.php?pid=3074 问题分析 从题目中我们可以看出,我们要进行的操作时区间求值和单点修改。并且在每次更新时需要取模。(好水) 代码片段 建树 void build(ll s,ll t, ll p) { tree[p].l = s,tree[p].r = t; if (s == t) { tree[p].val = a[s];原创 2021-08-24 10:15:55 · 100 阅读 · 0 评论 -
Codeforces438D(线段树区间取模)
题目链接 https://codeforces.com/problemset/problem/438/D 思路分析 从题意我们可以看出这个题对线段树有三个操作:区间求和,区间取模以及单点修改。 首先,对于区间求和和单点修改就不需要说了,这是最经典的线段树操作。 对于区间取模,我们可以这样想,我们保存一个区间最大值,如果这个最大值都比模数要小,那么我们也就不需要取模了,这个时间复杂度也是在题目的接受范围的。因此我们在每次操作的时候都应该将区间最大值保存起来。 代码片段 建树 void bulid(ll原创 2021-08-24 09:50:17 · 446 阅读 · 0 评论 -
洛谷P3373 【模板】线段树 2
原题链接 题目描述 如题,已知一个数列,你需要进行下面三种操作: 1.将某区间每一个数乘上 x 2.将某区间每一个数加上 x 3.求出某区间每一个数的和 分析:显然这题比p3372更复杂一点(主要体现在既有加又有乘的操作) 那么对于我们的add,mul的tag就有一个先后顺序 即每次更新mul的时候我们都要把之前的add乘上这个 但是更新add的时候不考虑mul #include <bits/stdc++.h> #define MAXN 100010 #define ll long long u原创 2021-07-15 20:07:50 · 100 阅读 · 0 评论 -
洛谷P3372 【模板】线段树 1
原题链接 题目描述 已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上 k。 2.求出某区间每一个数的和。 输入格式 第一行包含两个整数 n, m,分别表示该数列数字的个数和操作的总个数。 第二行包含 n 个用空格分隔的整数,其中第 i 个数字表示数列第 ii 项的初始值。 接下来 m 行每行包含 3 或 4 个整数,表示一个操作,具体如下: 1 x y k:将区间 [x,y] 内每个数加上 kk。 2 x y:输出区间 [x,y] 内每个数的和。 显然是一道线段树最简单的模板题了 #incl原创 2021-07-15 19:59:19 · 111 阅读 · 0 评论 -
线段树最基本的模板
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar原创 2021-07-15 11:13:36 · 175 阅读 · 0 评论