随笔分类 - 数据结构——STL
摘要:V.CF632F Magic Matrix 暴 力 出 奇 迹 其限制可以被转化为,对于位置 ,对其第 行和第 列的向量怼一块求个 后,所有位置的值都不小于 的值。 于是我们将所有元素按照从大到小排序,并按照上述次序依次
阅读全文
摘要:I.CF487E Tourists 用这题作圆方树的入门题还是很合适的。 首先,先建出圆方树出来。我们可以给方点赋一个权值,即为它连着的所有圆点的权值的。然后只需要在圆方树上查询路径即可。使用树剖即可。 但这个做法会被叉掉:当原图是一张菊花图时,花心的圆点将会连向个
阅读全文
摘要:IV.IV.[Ynoi2016] 镜中的昆虫 没错,这里就是CDQ分治 的优势所在了——本题似乎卡掉了空间复杂度为 的树套树。 但这不妨碍我继续说:树套树yyds 首先,这里有一个结论:长度为 的序列,修改 次,
阅读全文
摘要:IX.[Ynoi2017] 由乃的玉米田 比VII.小清新人渣的本愿仅仅多了一个除法操作。 常规方法看上去不行,考虑根号分治。对于 的询问,直接暴力枚举较小的那个数即可。对于 的询问,考虑 扫一遍回答所有 为某一
阅读全文
摘要:VII.小清新人渣的本愿 仍是 bitset 优化莫队。 具体而言,减操作就直接右移/左移 bitset(具体哪个都行,反正是等价的)然后求 and 看看是否非零即可;加操作就同时维护原本的 bitset 和取反后的 bitset,然后就像减操作一样处理即可;乘操作就直接 地
阅读全文
摘要:XIV.CF70D Professor's task 没错,我们提到之前的Andrew算法的目的,就是为了运用在这题上——动态凸包。 明显这题不能用Graham,因为我们并不能找到一个固定的、一直在凸包上的点。 我们使用两个std::set来分别维护上下凸壳,当插入一个节点时,就向前向后不断删节点即
阅读全文
摘要:XLVI.CF1408G Clusterization Counting 很明显,将边按照权值从小到大排序后,依次用冰茶姬合并,如果任意时刻出现了团,则这个团显然是唯一合法的可能。人脑思考可得这个团之间的关系肯定是个划分树关系(即一个大团裂成许多小团的树形关系),因此总合法团数是
阅读全文
摘要:XLV.[HNOI2009] 梦幻布丁 线段树合并是非常显然的,但是这里我们偏不用。这里我们使用的是启发式合并——虽然这仍然非常显然。 可以使用链表做到 但是我太懒了因此直接暴力用 set 做了,是 的不过一样也能过。 附:set 直接
阅读全文
摘要:XLII.[NOI2019] 弹跳 一眼看上去,单点向矩阵连边、最短路,这不是数据结构优化建图是什么? 想了想二维线段树优化建图,发现可以。 于是就写了,内层线段树写的还是可以压缩空间的线段树合并。 然后MLE了。 分代码: #include<bits/stdc++.h> using
阅读全文
摘要:XXXV.CF36E Two Paths 为什么这题会被归到数据结构博客里呢?因为我的代码使用了大剂量的 STL。 我吹爆 list 有没有!再也不手写链表了(并不),但是在欧拉路问题上真的贼好用! 首先,覆盖所有边恰一次,妥妥的欧拉路模型。 然后就先考虑如何判无解了。怎样无解呢? 有少于 \(2\
阅读全文
摘要:III.CF1093E Intersection of Permutations 首先,我们如果令表示在数组中出现的位置, 那么对于一次询问,答案就是中下标在间的数量。 思路1.树状数组套权值线段树
阅读全文
摘要:XVI.CF715C Digit Tree 好久没写淀粉质了,省选前就来一题练练手罢。 路径上的数就拆成两半分别取模,最后用一个 map 储存并合并即可。因为本题维护的信息(对数)具有可减性,因此可以采取求出整棵树的值后,减去每棵子树的值的做法。 本题的 unordered_map 被卡了,必须用
阅读全文
摘要:III.BZOJ3784: 树上的路径 思路1: 淀粉质。用priority_queue维护前长的路径的长度。用multiset维护点分治时,之前所有子树的路径长度,然后对于新子树中的每一条路径,在multiset中从大往小枚举另一半路径拼一起并尝试加入优先队列。如果加入失败,那么对于这个点,
阅读全文
摘要:I.CF1458E Nim Shortcuts 我们考虑把一对石子堆 映射到笛卡尔平面上的一个点 。 先考虑没有捷径时的方案。很明显,这是简单的NIM游戏,当且仅当直线 上的状态是先手必败态。但是,我们有必要搞清楚该结论的由来: 如果对于一个位置
阅读全文
摘要:XV.Annihilate 我当年为什么会手贱开这卡常大毒瘤题呀 思路1. 用vector存下每个字符串在后缀排序后的下标,然后每次枚举两个串,用一个vector里面的数在另一个里面two-pointers找到它两侧的数,然后用ST表求LCP。 时间复杂度$O\Big(\sum|S|(\log\su
阅读全文
摘要:XIV.[SDOI2016]生成魔咒 动态SA?这怎么办? 我们考虑往每个后缀后面全都加入一个数。很明显,如果这样搞的话,你必须每加入一个数后都要重新后缀排序,不太可能完成。 这时,我们发现,如果这不是加入一个数,而是加入一整条后缀,那就会轻松很多,一个平衡树就能搞定。 思考后会发现,如果我们将整个
阅读全文
摘要:XXVI.[AH2017/HNOI2017]单旋 先从单旋最小/大值的操作看起。手动模拟一下的话就会发现它对整棵树的形态几乎没有影响,就是断开最小值与它父亲的连边,并用其原本的右儿子(如果存在)替代。之后,将整棵树的根设作其新右儿子。最大值同理。 然后删除最小值也类似。注意删除一个原本就在树顶的最小
阅读全文
摘要:XXII.SP16580 QTREE7 - Query on a tree VII 它来了,它来了!LCT树套树的经典题,它来了! 虽然只是LCT套 std::multiset 而已 这题具体过程同QTREE6,不再赘述。唯一有区别的是,这题需要维护的是虚子树中最大值,不具有可减性。 因此,我们采用
阅读全文
摘要:CIL.[NOI2020] 制作菜品 本题有三个难点:留意到题面中的 ;证明;想到 bitset 优化。 首先,在很隐蔽的角落,有一句话 。假如没看到这句话,就乖乖爆零罢。 结论1. 时一定有解。 要证
阅读全文
摘要:CXXVIII.[AGC020E] Encoding Subsets 这种“压缩”题可以考虑区间DP。但是若考虑标准的区间的话它“子集”等定义又不好处理。 于是我们考虑对字符串作DP。设 表示一个串 及其所有子集的压缩方案数。 显然,其有两种转移方式:一种是 \(S_0
阅读全文