随笔分类 -  数据结构

摘要:题目描述: 给定一个带权树,树上任意两点间的路径权值 d(x,y) 定义为 x,y 这两个点之间路径上的最小值,树上任意一点 x 的权值定义为这个点到树上其他所有点的路径权值和,即 d(x,i),现求树上每一个点的路径权值和。 I 阅读全文 »
posted @ 2022-11-03 20:37 浅渊 阅读(206) 评论(0) 推荐(0) 编辑
摘要:F.Multi-Colored Segments 题意: 给定 n(n2105) 个有颜色的线段 [l,r,c](1l,r109,1cn) .请计算 阅读全文 »
posted @ 2022-10-14 20:24 浅渊 阅读(139) 评论(0) 推荐(2) 编辑
摘要:有趣的游戏 题目描述 游戏在一棵大小为 n 的树上进行。其中每个点都有点权,第 i 个点的点权为 wi。 每一次系统会给出一条链,小 A 可以从这条链上找出两个点权不同的点 x,y,他的得分是 wxmodwy。然后小 B 会从整棵树中选取两个小 A 没有选过的点,计分 阅读全文 »
posted @ 2022-10-11 20:31 浅渊 阅读(43) 评论(0) 推荐(0) 编辑
摘要:Little Girl and Problem on Trees 题意: 给定一棵无边权的树,除了根节点以外的节点度数不超过 2,有两种操作 (0 v x d)将距离 u 节点 d 距离之内的节点的值加上 x (1 v)询问 u 节点的值 n100000,$q\le 阅读全文 »
posted @ 2022-10-10 15:50 浅渊 阅读(20) 评论(0) 推荐(0) 编辑
摘要:F - Rectangle GCD 题目描述: 有一个N×N的平面,有两个序列Ai,Bi,平面上的点(i,j)对应的值是Ai+Bj,有Q次询问,每次询问要查询 (h1,w2)(h2,w2) 为左上和右下顶 阅读全文 »
posted @ 2022-09-29 10:53 浅渊 阅读(38) 评论(0) 推荐(0) 编辑
摘要:Yazid的新生舞会 题目描述 Yazid 有一个长度为 n 的序列 A,下标从 1n。显然地,这个序列共有 n(n+1)2 个子区间。 对于任意一个子区间 [l,r],如果该子区间内的众数在该子区间的出现次数严格大于 $\fr 阅读全文 »
posted @ 2022-09-28 11:13 浅渊 阅读(36) 评论(0) 推荐(0) 编辑
摘要:胜哥投喂的一道面试题 题意:有一个环形数组a,找出两个不重叠的子串,是的这两个区间内所有的数加起来的和最大。 数据范围: 1n105,|ai|109 思路:看到环形数组而且要选取一段长度为不超过n的区间,所以不 阅读全文 »
posted @ 2022-09-27 00:06 浅渊 阅读(64) 评论(0) 推荐(0) 编辑
摘要:题目链接 题意:实现三种操作1.p加入集合中,2.p从集合中删去,3.查询集合中所有的树在异或p之后有多少个数小于l. 思路:看到跟异或的统计数字问题,所以考虑用01Trie树来实现这些操作,将p加入到集合或从集合中删除,就是很正常的Trie树的操作,将每一个 阅读全文 »
posted @ 2022-09-16 16:36 浅渊 阅读(16) 评论(0) 推荐(0) 编辑
摘要:题目链接 思路:因为所有点的权值是互不相同的,并且概率0<px<1,也就是所有的点都会被选到。所以用dp[i][j]来表示节点i权值为j的概率。首先考虑叶子节点,叶子节点都没有子节点所以他们的权值是确定的,dp[i][j]=[i=val];再考虑只有一个子节点的 阅读全文 »
posted @ 2022-09-08 17:52 浅渊 阅读(38) 评论(0) 推荐(0) 编辑
摘要:题目链接 如果抛开换根的操作话,就是一个很简单的树链剖分的模板题。但是加了换根之后就边的复杂了起来。首先我们知道,肯定不能每一次换根之后都重新将树剖分一次,所以我们需要去找到换根之后的root和我们要去查询的节点之间的关系。 一个很不错的博客 首先来考虑一下如果换根之后,我们要查询的节点u阅读全文 »
posted @ 2022-08-31 19:29 浅渊 阅读(19) 评论(0) 推荐(0) 编辑
摘要:题目链接 题目大意就是要我们对一个区间执行区间翻转和整体移动区间的操作。 思路:将一个区间分裂出来再移动到另一个节点的后面,可以用fhqtreap来将这一个子树从原树中分裂出来然后再合并到后面去,同时区间反转操作也可以通过打标记的方式来确定这个区间要不要翻转,反转的时候只用将左右子树交换一下位 阅读全文 »
posted @ 2022-08-31 19:12 浅渊 阅读(20) 评论(0) 推荐(0) 编辑
摘要:题目链接 需要实现区间覆盖,区间01取反,区间求和以及区间查询最大连续段。区间覆盖很好实现,区间01取反只需要用分别统计01个数的时候将他俩交换就可以了,区间求和在取反之后只需要lensum就可以求出来了。重点就是区间最大连续子段,分成三类: 1.左区间全满且跨越到右区间 $2 阅读全文 »
posted @ 2022-08-31 19:04 浅渊 阅读(23) 评论(0) 推荐(0) 编辑
摘要:题目链接 主要要实现区间覆盖和区间查询不同数,看见区间赋值操作可能会想到ODT来实现,区间查询不同数直接另外开一个数组记录一下就好了,但很可惜TLE了,代码如下: struct ODT { struct Node { i64 l, r; mutable i64 v; Node (i64 l, 阅读全文 »
posted @ 2022-08-31 18:49 浅渊 阅读(15) 评论(0) 推荐(0) 编辑
摘要:题目链接 思路: 分成两类:1.村民说真话,2.村民说假话。当村民说是好人的时候,有两种情况,他们都是好人和都是坏人。所以将a + (x+y), b + (x+y)a,b合并为一个集合。同理将a,b+(x+y)a+(x+y),b合并为一个集合 阅读全文 »
posted @ 2022-08-28 20:50 浅渊 阅读(36) 评论(0) 推荐(0) 编辑
摘要:题目链接 题意:将一个序列分成k段,求出这k段中cost(t)=xset(t)last(x)first(x)的大小,也就是求出区间内最后一次出现的数和第一次出现的数之间的差值。 思路: 对于求解这个式子的最小值,考虑用dp来求解,$d 阅读全文 »
posted @ 2022-08-12 21:28 浅渊 阅读(20) 评论(0) 推荐(0) 编辑
摘要:题目链接 思路: 实现两个操作,区间加法和查询区间第k大。考虑分块的做法,区间加法对整块来说可以直接另开一个数组tag来对整块进行区间加法,对于零散块就直接暴力的加上。 区间加法 void update(int l, int r, i64 x) { if (belong[l] == belong 阅读全文 »
posted @ 2022-08-12 15:07 浅渊 阅读(47) 评论(0) 推荐(0) 编辑
摘要:众所周知,Ginger是一位实力强劲的算法竞赛选手,擅长各种各样的算法,一切问题对于 Ginger来说都游刃有余。这一天Ginger发现了一个有趣的题目,题目的内容是这样的: 有n个算法,Ginger每次选择一个区间[l,r],学习这个区间里的所有算法,但是每个算法只能学习一 阅读全文 »
posted @ 2022-08-12 11:33 浅渊 阅读(43) 评论(0) 推荐(0) 编辑
摘要:珂朵莉树(ODT) 0x01 珂朵莉树可以解决什么问题 对于涉及区间推平操作的问题,就是把[l,r]区间内的所有数字变成相同的一个数。如果数据是随机的就可以使用珂朵莉树。 0x02 珂朵莉树的基本原理 比如一开始把一个区间分成这些部分,那么我们就可以用一个结构体将相邻的数字存起来,分别记录 阅读全文 »
posted @ 2022-08-05 12:08 浅渊 阅读(54) 评论(0) 推荐(0) 编辑
摘要:题目链接 读题可以发现,我们要实现区间整体变成0,和区间内非0的位置建上一颗树。那么这个时候我们看到有区间推平操作就可以想到神奇的珂朵莉树(ODT),那么这个时候我们就要考虑将树木和树苗区分开,我们可以假定树苗是1,树木的值是2。那么在砍树的时候直接推平整个区间,但是在推平的过程 阅读全文 »
posted @ 2022-07-29 22:44 浅渊 阅读(62) 评论(0) 推荐(0) 编辑
摘要:题意:给我们一个序列,表示第i个人想要在Xi人前面获得糖果,不然就会获得不满意度。要我们求出来这个序列中的最小不满意度是多少。 思路:因为这个题假设每一个人入度都为1的话,它整体就是一个环,所以现在去考虑序列中存在入度为0的点。我们考虑用DSU来存储边得关系 #include 阅读全文 »
posted @ 2022-06-27 21:24 浅渊 阅读(27) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示