数据结构
文章平均质量分 57
1
一个老实的人
这个作者很懒,什么都没留下…
展开
-
天梯2021 L2-11.完全二叉树的层序遍历(25分)【递归】
Date:2022.04.14题意描述:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是完美二叉树。对于深度为 D 的,有 N 个结点的二叉树,若其结点对应于相同深度完美二叉树的层序遍历的前 N 个结点,这样的树就是完全二叉树。给定一棵完全二叉树的后序遍历,请你给出这棵树的层序遍历结果。输入格式:输入在第一行中给出正整数 N(≤30),即树中结点个数。第二行给出后序遍历序列,为 N 个不超过 100 的正整数。同一行中所有数字都以空格分隔。输出格式:在一行中输出该树的层序遍历序列原创 2022-04-15 00:27:40 · 185 阅读 · 0 评论 -
天梯L2-011 玩转二叉树 (25 分)【求二叉树的遍历序列】
Date:2022.04.19题意描述:给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列。所谓镜面反转,是指将所有非叶结点的左右孩子对换。这里假设键值都是互不相等的正整数。输入格式:输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其中序遍历序列。第三行给出其前序遍历序列。数字间以空格分隔。输出格式:在一行中输出该树反转后的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。输入样例:71 2 3 4 5 6 74 1原创 2022-04-19 19:09:33 · 163 阅读 · 0 评论 -
天梯L2-006 树的遍历 (25 分)【求二叉树的遍历序列】
Date:2022.04.19题意描述:给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。输入格式:输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其后序遍历序列。第三行给出其中序遍历序列。数字间以空格分隔。输出格式:在一行中输出该树的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。输入样例:72 3 1 5 7 6 41 2 3 4 5 6 7输出样例:4 1 6 3 5 7 2思路:二叉树中,给出中原创 2022-04-19 18:53:50 · 123 阅读 · 0 评论 -
天梯L2-004 这是二叉搜索树吗?(25分)【判定BST+重构树】
Date:2022.04.19题意描述:一棵二叉搜索树可被递归地定义为具有下列性质的二叉树:对于任一结点,其左子树中所有结点的键值小于该结点的键值;其右子树中所有结点的键值大于等于该结点的键值;其左右子树都是二叉搜索树。所谓二叉搜索树的“镜像”,即将所有结点的左右子树对换位置后所得到的树。给定一个整数键值序列,现请你编写程序,判断这是否是对一棵二叉搜索树或其镜像进行前序遍历的结果。输入格式:输入的第一行给出正整数 N(≤1000)。随后一行给出 N 个整数键值,其间以空格分隔。输出格式:原创 2022-04-19 16:49:58 · 133 阅读 · 0 评论 -
第十一届蓝桥杯省赛CB第一场-10.网络分析【带权并查集】
Date:2022.04.06题意描述:小明正在做一个网络实验。他设置了 n 台电脑,称为节点,用于收发和存储数据。初始时,所有节点都是独立的,不存在任何连接。小明可以通过网线将两个节点连接起来,连接后两个节点就可以互相通信了。两个节点如果存在网线连接,称为相邻。小明有时会测试当时的网络,他会在某个节点发送一条信息,信息会发送到每个相邻的节点,之后这些节点又会转发到自己相邻的节点,直到所有直接或间接相邻的节点都收到了信息。所有发送和接收的节点都会将信息存储下来。一条信息只存储一次。给出小原创 2022-04-07 00:37:03 · 292 阅读 · 0 评论 -
【一本通】数星星【BIT】
Date:2022.04.02题意描述:天空中有一些星星,这些星星都在不同的位置,每个星星有个坐标。如果一个星星的左下方(包含正左和正下)有 k 颗星星,就说这颗星星是 k 级的。例如,上图中星星 5 是 3 级的(1,2,4 在它左下),星星 2,4 是 1 级的。例图中有 1 个 0 级,2 个 1 级,1 个 2 级,1 个 3 级的星星。给定星星的位置,输出各级星星的数目。换句话说,给定 N 个点,定义每个点的等级是在该点左下方(含正左、正下)的点的数目,试统计每个等级有多少个点。原创 2022-04-02 02:14:30 · 115 阅读 · 0 评论 -
第五届蓝桥杯省赛CB 10.小朋友排队【BIT】
Date:2022.04.02题意描述:n 个小朋友站成一排。现在要把他们按身高从低到高的顺序排列,但是每次只能交换位置相邻的两个小朋友。每个小朋友都有一个不高兴的程度。开始的时候,所有小朋友的不高兴程度都是 0。如果某个小朋友第一次被要求交换,则他的不高兴程度增加 1,如果第二次要求他交换,则他的不高兴程度增加 2(即不高兴程度为 3),依次类推。当要求某个小朋友第 k 次交换时,他的不高兴程度增加 k。请问,要让所有小朋友按从低到高排队,他们的不高兴程度之和最小是多少。如果有两个小朋友原创 2022-04-02 02:10:41 · 90 阅读 · 0 评论 -
【进阶指南】数据结构 - 一个简单的整数问题【差分+BIT】
Date:2022.04.01题意描述:给定长度为 N 的数列 A,然后输入 M 行操作指令。第一类指令形如 C l r d,表示把数列中第 l∼r 个数都加 d。第二类指令形如 Q x,表示询问数列中第 x 个数的值。对于每个询问,输出一个整数表示答案。输入格式第一行包含两个整数 N 和 M。第二行包含 N 个整数 A[i]。接下来 M 行表示 M 条指令,每条指令的格式如题目描述所示。输出格式对于每个询问,输出一个整数表示答案。每个答案占一行。数据范围1≤N,M≤105,|原创 2022-04-01 16:43:46 · 316 阅读 · 0 评论 -
【进阶指南】数据结构 - 楼兰图腾【BIT】
Date:2022.04.01题意描述:在完成了分配任务之后,西部 314 来到了楼兰古城的西部。相传很久以前这片土地上(比楼兰古城还早)生活着两个部落,一个部落崇拜尖刀(V),一个部落崇拜铁锹(∧),他们分别用 V 和 ∧ 的形状来代表各自部落的图腾。西部 314 在楼兰古城的下面发现了一幅巨大的壁画,壁画上被标记出了 n 个点,经测量发现这 n 个点的水平位置和竖直位置是两两不同的。西部 314 认为这幅壁画所包含的信息与这 n 个点的相对位置有关,因此不妨设坐标分别为 (1,y1),(2,y原创 2022-04-01 16:23:10 · 105 阅读 · 0 评论 -
多lazytag线段树
HDU4578这是一道超好的题,麻烦归麻烦,加深了我对lazytag的认知,做了它我才知道原来之前在lazytag下传顺序这里我并没理解完全透彻顺序是怎么决定的。原创 2021-10-14 23:44:49 · 158 阅读 · 0 评论 -
洛谷P6812
若该序列是先辈,假设取长度为k的后缀,则该序列中前k个元素都比其长度为k的后缀屑,因此不难得出先辈一定是一个非递减序列。因此题目的询问变成求一个序列是否为非递减序列,用线段树维护。我的第一个想法,就是区间修改,然后根据要查询的区间对线段树中每个点单点查询,之后再判断是否是非递减序列。代码如下:#include <iostream>#include <cstring>#include <algorithm>using namespace std;const.原创 2021-10-27 01:13:24 · 87 阅读 · 0 评论 -
线段树区间01模型
之所以叫这个类型是区间01,本质是每次区间修改都是将区间中各个元素进行诸如0与1间的对换。直接见题。洛谷P2846 [USACO08NOV]修改好说,查询需要查询区间中1的个数,其实就是查询区间和。#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N = 1e5+10;typedef long long LL;int n,m,p,a原创 2021-11-17 01:00:11 · 417 阅读 · 0 评论 -
赛氪2021-2022冬季个人赛 -L.看错题【线段树】
Date:2022.03.27题目背景小Y同学发现自己的数学思维真是太差了,自己写题目的时候总喜欢去写数据结构题,因为数据结构大都是模板,就是背了板子就能强行干题,但是数据结构只要有一点思维在里面,他就不会做了,因此他决定去做题网站写一写题。巧合的是他看到了一道题,这道题要求的是,给定一颗线段树,每次区间加一个xx,如果每次在线段树区间加操作做完后,从根节点开始等概率的选择一个子节点进入,直到进入叶子结点为止,将一路经过的节点权值累加,最后能得到的期望值是多少?不巧的是,小Y同学看错题辣,他把进入叶原创 2022-03-28 01:24:07 · 771 阅读 · 0 评论 -
线段树求区间第k小
洛谷P1168题目本质就是从第一个元素开始插入,当线段树中元素个数为奇数(i%2==1)时,求所有插入元素的中位数(第i/2+1个数)的值。线段树专题,暂且不涉及平衡树(虽然挺主席树板子,但暂时先不涉及可持久化的)。由题不难想到,我们要插入线段树的点的值的范围确定,而且我们只需要统计各个点所在区间[tl,tr]中包含值的数量num,就能递归找到第k小的数所在根节点,从而得出第k小的数是多少。因此便得出如何建树,只需将原数组中所有点去重、排序,按去重后点的个数建树即可完成建树。插入即在线地将原数组的.原创 2021-10-19 15:49:31 · 456 阅读 · 0 评论 -
【2022寒假基础集训】第二场 -L/M.小沙的remake【BIT+DP】
Date:2022.03.12题目描述:小沙的人生充满坎坷,他现在准备remake,在新的人生中他想要自己的人生一帆风顺,步步高升,所以他希望自己的气运不会下降,他的新的人生,活的时间可以不长,但一定要步步高升。现在有nnn个气运放在小沙面前,小沙只能按着顺序选择,对于一个气运,他只能选择选或不选,并且他希望这个气运不能比之前已经选择的低,现在小沙想问你,小沙生成的新的人生有多少种可能。对于每个气运来说,每个气运都有自己的依赖性,他希望选择的气运的前bib_ibi 个以内至少存在一个已被选择的气运原创 2022-03-12 22:22:29 · 1173 阅读 · 0 评论 -
cf1234 Round #590 Div3-D【二维树状数组】
Date:2021.01.06题意:操作1:将第pos个位置改为字母c操作2:计算[l,r]中字母种类数思路:建26个BIT,编号0-25。设原序列为s,操作1即为在第s[pos]-‘a’个BIT中将第pos个位置-1;再在第c-'a’个BIT中将第pos个位置+1。操作2即为统计26棵BIT上有几个在[l,r]上的和>0。【注意BIT下标从1开始,别忘了初始化。】代码如下:#include <iostream>#include <cstring>#i原创 2022-01-07 17:21:12 · 319 阅读 · 0 评论 -
cf1566 Global Round 16-D1【树状数组】、D2【离散化+模拟】
Date:2022.01.17题意:n∗mn*mn∗m个座,n∗mn*mn∗m个人。每个人都有近视度,近视度小的坐的座位下标靠前,因此相对位置固定。每个人要找到他所在的行,并进入所在的列,在此过程中,定义这个人的“不方便程度”为他在这一行往里走的过程中,经过了多少个比他下标小的人。求总的不方便度最小是多少。D1:n=1n=1n=1,其它同D2。D2:思路①:D1只有一行,贪心【贪心见下】放进去,暴力(不如练练BIT板子)。代码如下:#include <bits/stdc++.h>u原创 2022-01-17 22:45:32 · 629 阅读 · 0 评论 -
cf1006 Round #498 Div3-E【DFS序】
Date:2022.01.12题意:给定一个n个点的序列,第i个点的父节点是a[i],这样构成一个树。m个询问,问以x为根的子树中dfs顺序从先到后为第y个的点的编号是几;如果y超过以该点为根的子树中结点个数,输出-1。思路:求出这个树的DFS序(也不算DFS序,就是DFS遍历的顺序,分岔路口时注意让序号小的点在前),(DFS序详解见此)标记出每个点的时间戳,直接就能得出每个子树中第y个点的编号是是多少。还有一点比较蛋疼的点,建树用add链式前向星加边是头插,也就是反着的(举个例子:样例中①的所有原创 2022-01-13 00:03:49 · 213 阅读 · 0 评论 -
DFS序线段树
HDU 3974题目要在树上进行修改,由于线段树专题且此题也并非对单链进行操作所以不需要用到树链剖分(其实是我太弱了不会而已),不过还是需要用到它的前置知识–dfs序。简单做个dfs序的笔记。dfs序:每个节点在dfs中进出栈的时间序列。常用于把树区间化(化为线性),从而求出每个节点的“管辖区间”。而且对于以某一节点为根的子树,它的dfs序中一定是连续的一段。那么如何限定这个“管辖区间”?答:标记dfs进入x (in)、离开x (out)的“时间戳”。如下树:上图树的dfs序:再原创 2021-10-08 22:03:17 · 549 阅读 · 0 评论 -
cf939 Round #464 Div2-D【DSU】
Date:2022.01.22题意:两个串,可花费一个魔法让一个字符能永久且不限制次数地转换为另一个字符,求让第一个串转化为第二个串所需的最小魔法数。思路:这可能是最简单的2D,DSU。代码如下:#include <bits/stdc++.h>using namespace std;const int N = 1e5+10;typedef pair<int, int> PII;typedef long long LL;LL p[N],n;string pp,qq原创 2022-01-22 20:47:07 · 434 阅读 · 0 评论 -
cf659 Round #346 Div2-E【DSU+判环】
Date:2022.01.18题意:n个点m条边,每两点之间至多有一条边,开始是无向的,现在要变成有向的,并定义所有入度为0的城市为“分离”的,求最少的分离的城市有多少个。思路:首先若干个连通的城市一定是有向图中的一个连通块,经过模拟,发现只要这个连通块中总边数>=总点数即可根据改变某些边的方向从而让每个点都不“分离”,又因为每两个点之间至多一条单向边,因此若这个连通块中总边数>=总点数那么它一定存在环。因此核心任务是判每个连通块中是否有环,有环对答案无贡献,无环贡献为1。此外,这里学到了原创 2022-01-18 23:21:26 · 403 阅读 · 0 评论