随笔分类 -  数据结构

摘要:某考研党复习到平衡树时突然心血来潮想自己实现一下AVL树QAQ。快一年没敲代码了码力下降严重,断断续续写了好久QAQ。写了快300行,不过是全凭自己感觉写的,也算是完成了当年没完成的心愿吧(自己独立写出一种平衡树)。 代码: #include <bits/stdc++.h> #define ls(p 阅读全文
posted @ 2020-10-22 20:48 维和战艇机 阅读(207) 评论(0) 推荐(0)
摘要:题意:给你一个序列,需要支持以下操作:1:区间内的所有数加上某个值。2:区间内的所有数除以某个数(向下取整)。3:询问某个区间内的最大值。 思路(从未见过的套路):维护区间最大值和区间最小值,执行2操作时,继续向下寻找子区间,如果区间满足:min - (min / x) == max - (max 阅读全文
posted @ 2019-09-25 19:37 维和战艇机 阅读(359) 评论(0) 推荐(0)
摘要:题意:给你一颗树,每次会修改一条边的边权,问修改之后的树的直径是多少? 思路:来源于:https://www.cnblogs.com/TinyWong/p/11260601.html 得到树的全序dfs序之后,我们考虑用线段树维护x - 2 * y + z。维护方法和2017, 2016那道题差不多 阅读全文
posted @ 2019-09-19 18:26 维和战艇机 阅读(362) 评论(0) 推荐(0)
摘要:题意:给你一个序列,问你这个序列有多少个子区间,满足把区间里的数排序之后相邻两个数之间的差 <= 1 ? 思路:https://blog.csdn.net/u013534123/article/details/81164504 代码: 阅读全文
posted @ 2019-09-03 17:12 维和战艇机 阅读(287) 评论(0) 推荐(0)
摘要:题意:有n个人,每个人有一件衣服需要洗,可以自己手洗花费t时间,也可以用洗衣机洗,但是洗衣机只有一台,即每个时刻最多只能有·一个人用洗衣机洗衣服。现在给你每个人最早可以开始洗衣服的时间,问当洗衣机的洗衣时间分别为1, 2....t的时候洗完所有衣服的最短时间。 思路:首先容易想到我们先把所有人按照洗 阅读全文
posted @ 2019-09-02 21:06 维和战艇机 阅读(518) 评论(0) 推荐(0)
摘要:题意:有一个n * 2的网格图,有3种操作:给两个相邻的点加上一条边,断开相邻的两个点连着的边,询问两个点的连通性。 思路:直接看博客就行了,https://blog.csdn.net/roll_keyboard/article/details/81185535,在纸上画一画来确定4个顶点之间的更新 阅读全文
posted @ 2019-09-02 12:58 维和战艇机 阅读(170) 评论(0) 推荐(0)
摘要:题意:给你一个长度为n的字符串,有m次询问,每次询问l到r的子串在原串中第k次出现的位置,如果没有输出-1。n, m均为1e5级别。 思路:后悔没学后缀数组QAQ,其实只要学过后缀数组这个题还是比较好想的。这个问题可以转化为有多少个后缀和后缀l的lcp长度大于等于r - l + 1。我们知道,在后缀 阅读全文
posted @ 2019-08-25 11:28 维和战艇机 阅读(348) 评论(0) 推荐(0)
摘要:题意:给你一张无向图,设s(x)为与x直接相连的点的集合,题目中有两种操作: 1:1 l r 将读入的边的序列中第l个到第r个翻转状态(有这条边 -> 没这条边, 没这条边 -> 有这条边) 2:2 x y 询问s(x)和s(y)是否相等。 思路(官方题解):首要问题是怎么快速判断s(x)和s(y) 阅读全文
posted @ 2019-07-27 00:15 维和战艇机 阅读(390) 评论(0) 推荐(1)
摘要:题意:有一个n * n的网格,每个网格中间有一颗树,你知道每棵树的高,你可以选择一个矩形区域把里面的树都围起来,但是矩形区域里面任意两棵树的高度差的绝对值不超过m,问这个矩形的最大面积是多少? 思路:前两天的牛客多校有一个最大子矩形问题,当时用的扫描线 + 单调栈过的,结果场上想了半天灭结果QAQ。 阅读全文
posted @ 2019-07-25 22:18 维和战艇机 阅读(444) 评论(0) 推荐(0)
摘要:题意:给你一个串,问满足以下条件的子串中最长的是多长:对于每个数字,要么在这个子串没出现过,要么出现次数超过k次。 思路:对于这类问题,常常转化为数据结构的询问问题。我们考虑枚举右端点,对于当前右端点,我们单独考虑每一种数的合法区间。假设当前枚举的右端点是i,考虑的数字是c,在右端点左边离i最近的数 阅读全文
posted @ 2019-07-25 11:00 维和战艇机 阅读(1072) 评论(4) 推荐(2)
摘要:题意:你有n个俄罗斯套娃,已知每个套娃的容积和体积,问有多少个子集满足以下条件: 1:这个子集是一个极大子集,即不能再添加其它的套娃到这个子集里。 2:子集的套娃之间的间隙和最小。 思路1:线段树优化DP: 首先把套娃按照容积为第一优先级,体积为第二优先级,从小到大排序。设ans[i].second 阅读全文
posted @ 2019-07-23 13:42 维和战艇机 阅读(444) 评论(0) 推荐(0)
摘要:题意:给你一个n * m的矩阵,问所有的a * b的子矩阵的最小的元素的和是多少。题目给出了矩阵中的数的数据生成器。 思路:如果这个问题是1维的,即求所有区间的最小元素的和,用单调队列O(n)就可以做。对于这个问题,我们先给每一行建一个单调队列,枚举子矩阵的行坐标的左端点和右端点。在行的左右端点的基 阅读全文
posted @ 2019-07-18 08:24 维和战艇机 阅读(324) 评论(0) 推荐(0)
摘要:题面: 维护一个W*W的矩阵,初始值均为S.每次操作可以增加某格子的权值,或询问某子矩阵的总权值.修改操作数M<=160000,询问数Q<=10000,W<=2000000. Input 第一行两个整数,S,W;其中S为矩阵初始值;W为矩阵大小 接下来每行为一下三种输入之一(不包含引号): "1 x 阅读全文
posted @ 2019-07-09 23:07 维和战艇机 阅读(206) 评论(0) 推荐(0)
摘要:题意及思路:https://blog.csdn.net/u013534123/article/details/89010251 之前cf有一个和这个相似的题,不过那个题只有合并操作,没有删除操作,直接并查集搞一搞就行了。对于这个题,因为有删除操作,我们对操作序列建一颗线段树,记录每个操作影响的区间操 阅读全文
posted @ 2019-06-15 12:04 维和战艇机 阅读(286) 评论(0) 推荐(0)
摘要:题意:有一个二维平面,以及n个操作,每个操作会选择一个矩形,使得这个二维平面的一部分被覆盖。现在你可以取消其中的2个操作,问最少有多少块地方会被覆盖? 思路:官方题解简洁明了,就不细说了:https://codeforces.com/blog/entry/63729。 此处重点记录一下两种做法的巧妙 阅读全文
posted @ 2019-06-14 22:23 维和战艇机 阅读(283) 评论(0) 推荐(0)
摘要:题意思路:https://www.cnblogs.com/jianrenfang/p/6502858.html 第一次见这种思路,对于集合大小分为两种类型,一种是重集合,一种是轻集合,对于重集合,我们维护这个集合加上的和,已经集合的和。对于轻集合,我们直接暴力在序列上加上和,以及把这种加和对重集合的 阅读全文
posted @ 2019-06-09 22:37 维和战艇机 阅读(269) 评论(0) 推荐(0)
摘要:题意:给你n个区间和m次询问,每次询问一个区间[l, r]至少需要几个区间覆盖? 思路:如果只有一个区间,并且区间是整个取值范围的话,这是一个经典的区间覆盖问题,我们都知道贪心可以解决。现在我们需要快速知道对于一个指定区间至少需要多少个区间来覆盖。我们有一个初步想法,我们可以预处理出包含某一个点的区 阅读全文
posted @ 2019-06-06 18:35 维和战艇机 阅读(535) 评论(0) 推荐(0)
摘要:题意:给你一颗以点1为根的数,有两种操作,一种是把x及其子树的所有点都灌满水,一种是把x及其所有祖先都放空水,一种是询问,问某个点里有没有水? 思路:看网上大多数是树剖,但实际上5e5的数据树剖还是有点慌的。。。我只用了线段树。我们发现,只要一个点被清空之后,如果没有灌水,那么这个点将一直是空的。同 阅读全文
posted @ 2019-05-30 23:48 维和战艇机 阅读(356) 评论(0) 推荐(0)
摘要:题意及思路:https://blog.csdn.net/tianyizhicheng/article/details/90369491 代码: 阅读全文
posted @ 2019-05-28 09:50 维和战艇机 阅读(197) 评论(0) 推荐(0)
摘要:题意:给你一个括号序列,这个括号序列将确定一颗二叉树。有q次询问,每次询问输出这颗树的直径。 思路:https://blog.csdn.net/Huah_2018/article/details/89788074 代码: 阅读全文
posted @ 2019-05-24 21:41 维和战艇机 阅读(355) 评论(0) 推荐(0)