08 2022 档案

摘要:题目链接 如果抛开换根的操作话,就是一个很简单的树链剖分的模板题。但是加了换根之后就边的复杂了起来。首先我们知道,肯定不能每一次换根之后都重新将树剖分一次,所以我们需要去找到换根之后的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) 编辑
摘要:矩阵递推斐波那契数列 斐波那契数列都很熟悉,它满足, Fn={1n2\Fn1+Fn2n>2 。 因为Fn从第三项开始是不断的递推下去的,所以我们可以考虑用矩阵加速递推。 设$Fib 阅读全文 »
posted @ 2022-08-30 22:46 浅渊 阅读(74) 评论(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) 编辑
摘要:题目链接 因为买一个物品可以有一些替代品来让原先的价格降低,所以可以考虑将每一件物品看成一个点,然后将所有能够替代的物品和此物品连边,物品的价格就作为边权,现在我们就将这个问题转化成了最短路的问题,每一次的答案都是在节点编号为1的地方取。解决了上面的问题之后,我们还要注意到另外的限制:等级限制, 阅读全文 »
posted @ 2022-08-26 18:45 浅渊 阅读(17) 评论(0) 推荐(0) 编辑
摘要:C 题目大意: 给我们一张网格图,我们求出所有的路径使得这个路径至少包括四个点,且这四个点是严格递增且相邻两个点的差值为1,并且这条路径如果能走就必须走到不能走为止。 解题思路: 考虑从起点开始走一直走到最后的话,会有dfsbfs两种想法,但是如果是用bfs的话,统计终点的方案不是 阅读全文 »
posted @ 2022-08-26 14:37 浅渊 阅读(22) 评论(0) 推荐(0) 编辑
摘要:#题目链接 题目意思:给一个以1为根,n1条双向边的树形结构,让我们选出k个节点作为出发点前往根节点1,算出每一个出发点到根节点的路径上有多少个非出发点的节点数的总和。 思路:如果我们选u节点作为非出发点的话,u的子树都会加上u这个节点的贡献1,总共$siz_u-1 阅读全文 »
posted @ 2022-08-20 10:13 浅渊 阅读(18) 评论(0) 推荐(0) 编辑
摘要:A 判断这个字符是大写还是小写,大写输出A小写输出a char s; std::cin >> s; std::cout << (std::isupper(s) ? "A" : "a"); B 有N个物品,选出K个物品,使选出的物品价值之和最小。排个序将前k个加起来就行了 int 阅读全文 »
posted @ 2022-08-18 21:21 浅渊 阅读(34) 评论(0) 推荐(0) 编辑
摘要:A 直接输出a×b即可 int a, b; std::cin >> a >> b; std::cout << a * b << "\n"; B 将所有的N个数乘起来看是不是大于1018,很明显会爆long long而用高精度的话也太麻烦了,所以可以考虑用$__ int 阅读全文 »
posted @ 2022-08-15 14:44 浅渊 阅读(26) 评论(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) 编辑
摘要:Slipper 题意: 我们知道有n个节点,有n1条边,所有的点形成了一棵树,每一个点到下一个点都有代价cc,我们也有一个操作,可以将满足|depthidepthj|=k的所有点联通,连起来的新的边的代价是c,要我们求从 阅读全文 »
posted @ 2022-08-05 12:20 浅渊 阅读(32) 评论(0) 推荐(0) 编辑
摘要:珂朵莉树(ODT) 0x01 珂朵莉树可以解决什么问题 对于涉及区间推平操作的问题,就是把[l,r]区间内的所有数字变成相同的一个数。如果数据是随机的就可以使用珂朵莉树。 0x02 珂朵莉树的基本原理 比如一开始把一个区间分成这些部分,那么我们就可以用一个结构体将相邻的数字存起来,分别记录 阅读全文 »
posted @ 2022-08-05 12:08 浅渊 阅读(54) 评论(0) 推荐(0) 编辑

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