自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 收藏
  • 关注

原创 CSP-S2021复赛蒟蒻游记

Day -3好耶,可以在本地考试。: D可以看见好多好多的大佬啊。Day -2模拟考试又又爆零,感觉CSP也要爆零了。坏耶,还是去外地考,(太菜了,压线进复赛 )qwq还是可以看见好多好多的大佬啊。Day -1明天就要比赛,激动啊。在学校复习了一点点东西,感觉没有 。放学回家,吃饭洗澡睡觉,甚至没有复习。不过睡的蛮好的。心态好啊 。Day 0晚晚的起来了,吃了4个大汤圆就出门了。上车了,和同学快乐地交流,甚至有种旅游的感觉。窗上起雾了,我画了一个CSP AK ME。反向奶看见

2021-10-31 14:26:12 566 1

原创 NOIP2021蒟蒻游记

Day -5集训的最后一个星期,不知不觉已经离开班级2个月了呢,文化课或许真的是个大问题。今天模拟赛,0的突破,终于上了100分,太感动了。T2明明可以A掉的,1e9用递归算的憨憨。T1签到题我不理解了,我就是签不上啊啊,写完博客后原来那么简单,其实也想到了,不过map不会用啊啊啊!明天又要考试,祝好。...

2021-11-20 13:44:08 551

原创 学习笔记:2-SAT问题

前言最后一篇学习笔记了,之后就要咕咕咕很久了。在机房的最后一天,祝好。原理传送门luoguP4782解释一下题目:根据要求将布尔变量赋值,如1 1 3 0就是说要求将变量1为1或者变量3为0。由于每个布尔变量只有两个值1,0。我们可以将其拆开,由此我们发现:对于变量x,y,要求x或y要满足的值为a,b当a=1,b=1时,如果x=0,那么一定推出y必须为1,如果y=0,同理推出x=1。当a=1,b=0时,如果x=0,那么一定推出y必须为0,如果y=1,同理推出x=1。当a=0,b=1时,如

2021-11-19 08:32:01 297

原创 学习笔记:KMP字符串匹配算法

前言其实很早就学了,不过还是感觉很迷。但做到了NOIP2020的T2,只有学一下了。原理KMP是由3名数学家搞出来的算法,KMP也就是这3位的首字母。模板传送门luoguP3375首先看题目要求给定2个字符串,要求其中的一个字符串在另一个字符串里出现的次数。容易想到暴力:直接枚举2个串,如果不同,就将去匹配的串从头开始重新从匹配失败的位置继续找。最坏的时间复杂度是:O(nm)这个暴力算法叫做BF算法。我们发现这个算法最主要的问题是每次从头开始重新匹配,其实可以从其中的某个地方开始找,

2021-11-17 11:21:58 148

原创 NOIP模拟试题2021/11/16

前言该死的概率期望,一看就会,一做就废。T1暴力注意此题不需要去重,不难发现行和列可以单独计算。用r[]和c[]表示每一行和每一列的宝藏数,宽度只有1的就解决了,那宽度不为1的呢?维护2个前缀和,宽度大小就是r[i]-r[j-1],暴力枚举前缀和后放到桶里。利用乘法原理统计即可。时间复杂度O(n^2+m^2+k)代码实现:#include<bits/stdc++.h>using namespace std;const int N=1e5+5,M=105;int n,m

2021-11-16 20:14:08 558

原创 NOIP2020 T1排水系统

传送门luoguP7113我们先手动模拟一下:虽然图画的丑,也画的水。但我们不难发现:流向子节点的水等于父节点的水除以出度。由于要得到某个点的流量,我们要先计算出父节点的流量,这样我们不难发现要用的拓扑排序尽管图中没画出多个源点,我们发现从多个源点出发寻找过于麻烦,我们不妨用一个超级源点去连所有源点,超级源点的水就是所有的和,这样就巧妙的解决了这个问题。由于是分数的计算,这里我使用的结构体存分子和分母。将超级源点分子为所有源点之和,分母为1对于一个没有被更新的点,即分子分母均为0,

2021-11-15 21:39:16 503

原创 NOIP模拟试题2021/11/15

前言居然说T1是签到题,直接不会,T2构造简单多了。太蒟蒻了。qwq被同桌吊打中。qwqT2容易想到一种美丽的构造方法。n=2时:0 11 0n=4时:1 1 0 10 0 0 11 0 0 01 0 1 1n=6时:1 1 0 1 0 10 0 0 1 0 11 1 0 0 0 00 0 0 0 1 11 0 1 0 0 01 0 1 0 1 1n=8时:1 1 0 1 0 1 0 10 0 0 1 0 1 0 11 1 0 0 0 0 0 00 0 0

2021-11-15 17:17:12 279

原创 NOIP模拟试题2021/11/11

T1对于要走到终点,如果无法直接走到,我们就要在环上绕,由于绕一个环可能会有多余的部分绕,对于一条能够到达终点的路径,途中遇到还不能走的边,我们就要去绕环,所以我们考虑找到每条能够到终点的路径的要解锁的边的最大值,并找到每个点的能绕的最小环的边数,计算即可。我想法是:先用tarjan算出每个点属于的强连通,然后再bfs在这个强连通里找它的最小的环,然后再dfs找路。不过WA了2个点。qwq蒟蒻代码实现:#include<bits/stdc++.h>using namespace s

2021-11-12 11:55:14 612

原创 学习笔记:树链剖分

前言树链剖分,将树的边划分为很多条链,由此降低对树上修改查询等的复杂度。本次介绍轻重链剖分。概念:重儿子:子树的节点最多的儿子,其中如果两个儿子的子树都相同,那么其中任意个。轻儿子:其余的儿子。重边:父亲到重儿子的边。轻边:其余的边。重链:节点到重儿子的路径。原理模板传送门luoguP3384分析:要对某一段链或子树进行修改和查询,容易想到使用线段树维护,那么我们应该如何将树进行分解,使得能在放到线段树上进行修改查询。这就要用到树链剖分。树链剖分我们通过2次DFS来分解。第一次

2021-11-10 21:34:28 179

原创 NOIP模拟试题详讲2021/11/9

T1题目大意: 对于一个长度为n,1的个数有k的01串,求出有最多含有奇数个1的区间的数量,和任意一种满足的方案。找规律,本蒟蒻写了一个暴力发现:1.最大数量不受k的影响。2.最优解的方案肯定存在:前面放k-1个1,再在后面0的中间位置放一个1就可以了。下面给出我打出表:表示的是n时最大数。|1:1|2:2|3:4|4:6|5:9|6:12|7:16|8:20|9:25|10:30|11:36|12:42|13:49|14:56|15:64|16:72|观察发现,|2,4,6|6,9,12|1

2021-11-09 16:35:55 138

原创 学习笔记:状态压缩DP

前言状态压缩DP,顾名思义,将每个状态进行压缩后进行DP,那么为什么可以压缩,怎样压缩?原理直接介绍比较抽象,我们来看一道例题。传送门luoguP1278分析:题目要求2个字符串的末尾和开头如果相等,即可合并,求最长的合并的字符串。观察发现字符串的范围≤16\leq 16≤16。暴力:直接DFS枚举所有的排列方式,不断更新答案即可。DFS时如果一个字符串能接上,打上标记,回溯回来后,取消标记。但是我们发现排列数是nnn的全排列,排列方式达到了n!n!n!!显然16的范围是无法满足的。于

2021-11-09 14:42:26 100

原创 NOIP模拟试题详讲2021/11/6

T1题目大意:对于一个序列,将其随机排序,求使之单调不下降的期望。答案对1e9+7取模。

2021-11-07 19:38:40 494

原创 学习笔记:求逆元的三种方法

前言对于模运算来说:(a+b)mod  p=(amod  p+bmod  p)mod  p(a+b)\mod p=(a\mod p+b\mod p)\mod p(a+b)modp=(amodp+bmodp)modp(a−b)mod  p=(amod  p+bmod  p)mod  p(a-b)\mod p=(a\mod p +b\mod p)\mod p(a−b)modp=(amodp+bmodp)modp(a×b)mod  p=(amod  p×bmod  p)mod  p(a\times b)\

2021-11-06 20:34:20 776

原创 数论学习笔记:积性函数,欧拉函数

积性函数定义定义在N+N^+N+上的函数称为数论函数。如果数论函数fff对于∀p,q∈N+\forall p,q\in N^+∀p,q∈N+满足gcd(p,q)=1gcd(p,q)=1gcd(p,q)=1有f(qp)=f(q)f(p)f(qp)=f(q)f(p)f(qp)=f(q)f(p)那么称为积性函数。如果对∀p,q∈N+\forall p,q\in N^+∀p,q∈N+有f(qp)=f(q)f(p)f(qp)=f(q)f(p)f(qp)=f(q)f(p)那么称为完全积性函数。定理:如果f

2021-11-05 18:27:05 247

原创 NOIP模拟试题详讲2021/11/4

又是爆0的一天呢码风有点点变,可能以后都是这样了qwqT1题目大意:有2个序列A,B,可以使某区间加上一个数,每次修改询问min(max(a1,a2,a3...ap,bp+1...bn)∣0≤p≤n)min(max(a_1,a_2,a_3...a_p,b_{p+1}...b_n)|0 \leq p\leq n)min(max(a1​,a2​,a3​...ap​,bp+1​...bn​)∣0≤p≤n)。思路:我们发现:遍历的顺序是先走A,再走B。情况1:红色的代表[l,r][l,r][l,r]

2021-11-04 21:54:35 99

原创 高等数学学习笔记2:微分,不定积分,定积分

前言Q:高等数学学习笔记1跑哪里去了???A:还没写,下次补发。其中会有一些我的理解,若不正确,感谢指出错误。理解这篇文章,需要三角函数,导数。微分微分在数学中的定义:由函数B=f(A),得到A、B两个数集,在A中当dx靠近自己时,函数在dx处的极限叫作函数在dx处的微分--百度百科我们去估计Δy\Delta yΔy的值,就是等于x0x_0x0​处的切线斜率乘上Δx\Delta xΔx,即Δy=Δx×f′(x)\Delta y = \Delta x \times f^\prime(x

2021-11-04 14:58:37 1241

原创 学习笔记:分块

前言分块可以解决几乎全部的区间查询区间更新等问题,功能比线段树和树状数组要强大,但是时间复杂度会更大一点。其实分块就是一种优化过的暴力,它是对于整体进行像线段树一样的维护,对局部进行暴力的修改。原理顾名思义分块分块,我们把长度为n的序列分为若干块。维护块内信息即可。又要问了,要多大呢?通常将块的大小设为n\sqrt nn​ ,用pos数组储存每个块的位置。最后分完有剩,那么剩余的单独为一个块。我们用线段树的例题来介绍传送门luoguP3372题目要求:1.区间更新:我们找在这个区间有多少

2021-11-03 19:55:01 126

原创 NOIP试题详讲2021/11/2

T1题目描述数独是一个有趣的游戏。你需要在一个9×9 的矩阵中的每个格子中填入1 ~9 的数字,使得没有两个相同的数字填入同一行、同一列或同一个九宫格中。整个矩阵被划分为9 个九宫格,若两个格子同时在最左三列、最右三列或中间三列,且同时在最左三行、最右三行或中间三行,则这两个格子在同一九宫格中。如果两个相同的数同行、同列或同九宫格,则构成一对冲突。现在有一个数独的初始状态,出题人想对其进行一些修改和询问操作。需要注意:在操作时,初始状态中的数也可以被删除或者合并时被替换。向目前状态中

2021-11-02 16:57:02 441

原创 NOIP模拟试题详讲2021/10/30

好难啊!!!!!!!!!!!T1集合给定一棵n个点的树,给定正整数k , 在树上找出k 个不同的点,设为A1,A2…Ak,使得∑k−1i=1dis(Ai,Ai+1)最小,输出这个最小值。其中dis(x,y)表示树上x,y之间最短路的长度。可以发现,k个点在原来的树上是一个连通的子树。对于主要路径上的边,权值只算一次,而其他额外的边,权值要乘上2。这里我们考虑使用树形DP。 虽然我考虑不到……我们可以原来的树拆成很多的子树,更新这些子树合并后的权值的状态。定义:size[x]表示以x为根的子

2021-11-01 10:47:09 204

原创 学习笔记:网络流最大流

引入使得整个网络的流量最大的流函数叫做最大流。举个栗子,如图 (太丑了太丑了)边权表示容量。我们可以观察到:如果拆开了来看,4-5-3-7这条增广路最大流量是3,超过了相当于水管就爆了。2-5-3-7这条增广路最大流量是2,2-10这条增广路最大流量是2,如果合并起来看的话,发现4-5-3-7如果走了的话,那么最大流量是3,那么其他边的剩余流量就会减少,变成1-2-0-4,这样的话,我们发现2-5-3-7这条路就不能走了。而2-10是可以走的,变成了0-8这样最大流就是3+2=5了。

2021-10-29 10:39:03 98

原创 DP最长上升或下降子序列应用:导弹拦截&&最长公共子序列

第一题传送门luoguP1020导弹拦截容易发现一颗导弹所能打击的最多目标即是最长不上升子序列。对于一共需要多少个系统来打,我们发现:对于一个上升子序,其中的每一个元素我们都需要使用1个系统打,我们找到了最长的上升子序,可以发现,不属于这个子序的元素一定是下降或者与其中的某个元素相等,对于一个下降序列的某个元素肯定会上升子序的某个元素,所以整个下降序列就可以被统计,而相等的元素,只需要1个系统就可以解决,所以也可以统计到。最终,最长上升子序列即是需要系统的个数。问题转化到这里,肯定是用dp求解,那

2021-10-28 15:22:19 87

原创 CSP-S2021试题T1廊桥分配详讲

来迟了来迟了,忘写了。我们来看看这道卡了本蒟蒻3个小时的题。传送门luoguP7913廊桥分配题目大意:分为了国内和国外两部分,飞机来了要么停廊桥要么走,有空位一定停,且停最小的,要如何分配廊桥才能使停的飞机数最大。首先我们要知道一个事实:对于n架飞机,有无数个廊桥,其中的一架飞机k,能够停在廊桥的要求是总的廊桥数大于等于从第一架来的飞机到它飞来时使它能停到廊桥的廊桥数。换而言之,对于某一架飞机,使它能停靠的廊桥数与有多少个廊桥无关。至于为什么,我们可以思考:尽管有无数个廊桥,但是飞机是严

2021-10-27 11:40:12 1341 2

原创 数位DP应用:round numbers

传送门luoguP6218题目要求找出二进制下0的个数至少大于等于1的个数的数。容易发现这是一道数位dp的题目,1~r的个数减去1~l-1的个数等于l~r区间的个数。我们还要关注前导零,因为前导零是不能统计到0的个数中的,当然还有最高位限制,然后记忆化搜索。基本的都已经分析过,主要是我们该使用哪些状态来描述呢?肯定要描述第t位的状态,既然题目要求0和1的个数,我们不妨就令另外状态为num0表示当前0的个数,num1表示当前1的个数。即dp[t][num0][num1]。当进入dfs初始化时,前导0

2021-10-26 21:38:52 87

原创 学习笔记:数位DP

引入数位dp,顾名思义,对数的每一位进行dp,具体我们来看题分析解决。原理传送门luoguP2657windy数此题就是一道非常标准的数位dp的题目,限制相邻位上的数字,要统计范围内的所有满足的数,如果暴力枚举肯定不够优美,那么我们对于每一位进行逐位逐位的确定,那么就能降低大量的复杂度。...

2021-10-26 17:20:48 78

原创 学习笔记:DP优化单调队列优化

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

2021-10-25 13:04:22 140

原创 强连通分量缩点应用:间谍网络

传送门luoguP1262通过本题我们不难发现:1.对于每一个点,那么入度为0必须贿赂,就可以去揭发其他的了2.对于每一个环,如果一个环上存在一个可以行贿的间谍,那么这个环都可以解决,我们只需要找到每个环上的需要钱的最小值,把它看做一个点。点权值就是最小的钱。这样我们就只需通过找入度为0的点了首先判断是否有点没有更新,即其他人无法揭露它,它也不能被检举,那么就输出NO然后我们枚举每一个边所对应的2个点,如果两个点不属于同一连通分量,那么将指向的那个连通分量的入度加+1,最后找到入度为0的点,统计他

2021-10-24 19:39:37 2267

原创 学习笔记:有向图强连通分量的tarjan算法

概念强连通分量有向图强连通分量 :在有向图G中,如果两个顶点vi,vj间(vi>vj)有一条从vi到vj的有向路径,同时还有一条从vj到vi的有向路径,则称两个顶点强连通 (strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图 。有向图的极大强连通子图 ,称为强连通分量。摘自百度百科我的理解就是在图的尽量大部分中,这部分中,从每个点出发,都可以回到该点,那么就是一个强连通分量。那么我们该如何找呢?原理找强连通的方法有两种算法Kosaraju算法和t

2021-10-24 18:59:20 182

原创 线段树应用:区间合并

传送门luoguP2894本题我们要维护最左边的值,考虑使用线段树维护。我们发现只用一个来存储当前的节点的值并不够,因为对于一个节点我们无法用一个来描述这整个区间哪些为空,哪些满了,例如查询的跨越了两个区间,我们就无法找到最左边的了。所以我们考虑用多个变量描述该区间的状态:lmx表示该区间最左边连续为空的个数,rmx表示该区间最右边连续为空的个数,len表示整个区间的总房间数,sum表示整个区间的总空房间数。这样我们可以很好的描述状态了,对于一个节点的左房间数等于t[k].lmx,若左儿子

2021-10-22 17:00:54 188

原创 学习笔记:树的直径

概念在树上所有最短路径的最大值。原理这里介绍2种方法求树的直径。两次DFS(BFS)法我们任意从树上某个点出发,找到到它最远距离的点,然后再以这个点为起点,找到离这个点最远的点,这两点之间的距离即是树的直径。#include<bits/stdc++.h>using namespace std;#define ll long long const int N=1e5+5;int n,Max,p,dis[N];ll ans;int first[N],nex[N],to[

2021-10-21 17:25:46 205

原创 学习笔记:二分图的判定与匹配

引入二分图,可以分成两个子集,子集之间的每个点互不相连。二分图判定判定二分图通常使用染色法。从每个没有被染色的点出发,将自己染为一种颜色,将相邻的点染为另一种颜色,若染色时发现对面的点已经染成和自己相同的颜色,那么它就不是二分图。代码实现:#include<bits/stdc++.h>using namespace std;int n,m,col[205];int first[205],nex[405],to[405],tot;inline void add(int

2021-10-21 14:40:20 128

原创 学习笔记:LCA最近公共祖先

引入LCA即最近公共祖先,是指在有根树中2个点的最近的公共祖先。那么我们该如何求解?暴力:在一棵树中,每个点有一个深度,那我们先把一个较深的点跳到和另一个点深度相同的位置,然后一起跳,跳到它们在同一位置时,即为LCA。但是这种方法显然不优美,如果在一条链的2端,那么复杂度将会是O(n)。那么问题出在哪里呢?很明显一步一步的一起跳显然太慢了,如果我们能一次多跳几步,那么可以降下来了。原理基于倍增的思想,我们一次多跳几步。那该跳多少步?我们知道任意一个整数可以分为2的整数幂的和。因为每一个偶数肯

2021-10-20 20:17:09 235

原创 学习笔记:树形DP

引入顾名思义,在树上进行动态规划,所以首先要满足,是一棵树,然后观察是否满足DP的要求。我们来具体情况具体分析。例题题目大意:在一棵树上安插士兵,在节点上的一个士兵能看到所有与它相连的边,求最少安排的士兵能看到所有的路。满足是一棵树,而是求最小值。我们考虑用树形DP,对于每一个节点,只有2种状态,放与不放,那么我们用二维存储dp[i][j]表示i节点的状态1或0表示总的士兵数。状态转移:若该节点不放,那么它的子节点必须放。若该节点放,那么它的子节点可放可不放,取最小值即可。由于是一棵树,根节

2021-10-20 18:12:01 90

原创 学习笔记:四大背包问题详讲

今天介绍4种基本的背包,01背包,完全背包,多重背包,分组背包。01背包给一个容量m的背包,有n个物品,每个物品有w的重量和c的价值,求最大价值。我们枚举每个物品,再枚举背包的重量,用一维数组dp[m]表示当前重量下最大价值。注意;背包的重量需要逆推,才能使得装入的物品不重复,否则将会变成下面介绍的完全背包。核心代码;for(int i=1;i<=n;i++) for(int j=m;j>=w[i];j--) //逆推 dp[j]=max(d

2021-10-20 15:05:44 109

原创 数论学习笔记:扩展欧几里得

欧几里得算法欧几里得算法:gcd(a,b)=gcd(a,a mod b)。我们可以用来求最大公约数gcd(a,b)用递归不断迭代,直到边界条件b=0后回溯。inline int gcd(int a,int b){ return b==0?a:gcd(b,a%b);}扩展欧几里得算法首先介绍裴蜀定理(Bezout定理)对于任何整数a,b,d=gcd(a,b),那么关于x,y的线性不定方程:当且仅当c是d倍数时,a*x+b*y=c有解(可能多个解)证明如下:我们使用数学归纳法证

2021-10-19 09:19:03 120

原创 学习笔记:Trie树详讲

引入假如我们给出大量的字符串,查询其中某两串的公共前缀,显然不断枚举比较是否相同的办法对于多次询问太慢了,这就要用到Trie树。Trie树即字典树,是一种能快速检索字符串的多叉树,但是Trie树的内存消耗很大,是用空间换时间的思想。那么它是如何实现的呢?原理假如给出abc,abd,abcd,bcd,efg五个字符串,先来看看构造出来的树。我们发现根节点是没有字符;第一字符不同在不同的子树上,而abc,abd第一字符相同就在同一子树上;而abc和abd由于最后一个字符不同,所以又分支了出去。原理十

2021-10-18 20:09:56 136

原创 2.NOIP模拟赛试题详讲

A题目描述:数轴上有n个棋子, 第i 个棋子初始在ai.你会不断对棋子进行操作, 每次操作是选择一个棋子, 假设它的坐标是x, 则可以把它移动到x−1或x−2, 但要求移动后的位置原先没有棋子.如果一个棋子的坐标变得小于等于0, 则称它挂掉了. 你需要求出有多少个排列p使得存在一种方案使得第i 个挂掉的棋子是pi. 答案对109+ 7取模.解析1.假如两个棋子位于101,103,和两个棋子位于1,3是没有区别的,可以101先挂掉,也可以以103先挂掉。2.假如位于2,3,4,那么2,3就会堵住4,所

2021-10-17 20:00:36 271

原创 1.NOIP模拟赛试题详讲

A题目描述: 给一个 n 个节点 m 条边的无向图, 有 k 轮操作, 每轮操作是选择尽量多的边删除, 如果有多种方案, 那么选择边权和最大的那个, 但是要求删除的边中不存在环.对于每条边, 输出它在第几次操作被删除, 如果这条边最后都没有被删除那么输出 0.先画个图来看看想法红色的为这一轮所选删除的边黄色为第2轮所删除的边。最后剩了边权为1的这条边。我们再观察一下,每次删除的就是一棵树,因为树上再加一条边就是环了,所以其实就是每次找最大生成树。那应该怎么找呢?本蒟蒻只搞出了暴力枚举每轮

2021-10-17 16:25:24 206

原创 学习笔记:RMQ问题ST表

引入RMQ问题是求一个区间的最大值问题,通常有很多的询问。那么我们要如何解决这种问题呢?暴力:当然可以O(nxm)n为个数,m为询问个数,显然不行。线段树:建树需要 O(logn)的时间,询问需要 O(logn)时间,线段树的算法是 O(nxlogn)+O(logn)的。Sparse Table(ST):它是一种基于倍增思想的算法,O(nxlogn)的预处理,O(1)回答每个询问,所以时间复杂度为 O(nxlogn)+O(m),空间复杂度为 O(nxlogn)。线段树的方法已经介绍,今天我们来

2021-10-17 14:26:18 79

原创 学习笔记:线段树基础和应用

引入如果我要不断访问一个区间的最大值,而且要不断更新点的值,那么树状数组就难办了。所以我们引入线段树这一数据结构来解决这些问题。线段树是基于分治思想的二叉树,是用来解决在线区间更改查询等问题的。让我们来了解一下它的原理吧。原理给出一个区间[1,5],我们将它二分,mid=(1+5)/2=3,左区间[l,mid]=[1,3],右区间[mid+1,r]=[4,5]。又将左区间二分,mid=(1+3)/2=2,左区间的左区间是[1,2],右区间是[2,3],又二分,直到分到l==r为止,以此类推,我们建

2021-10-17 13:27:32 100

原创 学习笔记:树状数组基础概念和应用

引入树状数组,顾名思义,像树一样结构的数。那它的作用是什么呢?我们知道前缀和,是一种非常高效且巧妙的思想,查询一个序列中的某一区间和[l,r],那么我们将可以预处理出[1,l-1],[1,r]的和,那么一相减便就得到[l,r]之间的和了。but,这只支持离线操作,如果我要不断的询问和修改的话,那么时间复杂度每次修改最坏就是O(n),所以就不行了,所以我们要引入了新的支持在线查询的东东——树状数组。它能以O(logn)的复杂度完成更新和查询。PS:树状数组能解决的问题,线段树都能解决,但有些问题线

2021-10-17 11:18:04 126

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除