随笔分类 -  数据结构

摘要:VI.[Ynoi2016] 掉进兔子洞 bitset 优化莫队。 具体而言,我们似乎只需要求出三个区间的 bitset,然后求交即可。 但是问题来了,bitset 似乎只支持不可重集求交呀? 没关系,我们考虑在离散化时,对于一个出现次数为 cx 的元素 x,预留它后面的 \(c_x 阅读全文
posted @ 2021-04-06 10:10 Troverld 阅读(48) 评论(0) 推荐(0) 编辑
摘要:V.CF940F Machine Learning 直接在线莫队即可。 需要注意的是,因为本题中 mex 大小是不可能超过 n 的,因此不用分块维护值域,直接暴力即可。时间复杂度 O(n5/3)。 代码: #include<bits/stdc+ 阅读全文
posted @ 2021-04-06 10:07 Troverld 阅读(48) 评论(0) 推荐(0) 编辑
摘要:III.[WC2013] 糖果公园 树上莫队。 树上莫队是依照于一种特殊的序列:括号序列而进行的莫队。括号序列,具体而言,是 dfs 树的时候,到一个点就插入序列,离开一个点的时候再插入一次。这样,所有在树上 xy 路径上出现的点,在括号序列上就是自 x 第一次出现的位置到 阅读全文
posted @ 2021-04-06 10:03 Troverld 阅读(65) 评论(0) 推荐(0) 编辑
摘要:II.【模板】回滚莫队&不删除莫队 莫,就硬莫。 代码: #include<bits/stdc++.h> using namespace std; const int BBB=450; int n,m,a[200100],mx[200100],mn[200100],ans,res[200100]; 阅读全文
posted @ 2021-04-06 10:01 Troverld 阅读(42) 评论(0) 推荐(0) 编辑
摘要:I.[JOISC2014]歴史の研究 解法1.普通莫队 普通莫队要保证复杂度是一个根号,须确保插入/删除一个数均是 O(1),而询问在 O(n) 以内。 关于本题,最好的分块维护方式,是对一个出现了 cntx 次的元素 x,将 \(1\times x,2 阅读全文
posted @ 2021-04-06 10:00 Troverld 阅读(74) 评论(0) 推荐(0) 编辑
摘要:XXIX.CF1195F Geometers Anonymous Club 闵可夫斯基和是关于两个凸包的运算,其几何意义是所有来自两个凸包内部的向量之和所构成的集合。 可以被证明的是,两个凸包的闵可夫斯基和,可以通过对两个凸包上的边按照极角大小排序后依次首尾相接得到。 回到本题。依照我们上述理论,我 阅读全文
posted @ 2021-04-05 20:57 Troverld 阅读(56) 评论(0) 推荐(0) 编辑
摘要:XXIV.「SWTR-04」Taking a Walk 题解 阅读全文
posted @ 2021-04-05 20:45 Troverld 阅读(34) 评论(0) 推荐(0) 编辑
摘要:XIV.CF70D Professor's task 没错,我们提到之前的Andrew算法的目的,就是为了运用在这题上——动态凸包。 明显这题不能用Graham,因为我们并不能找到一个固定的、一直在凸包上的点。 我们使用两个std::set来分别维护上下凸壳,当插入一个节点时,就向前向后不断删节点即 阅读全文
posted @ 2021-04-05 20:24 Troverld 阅读(59) 评论(0) 推荐(0) 编辑
摘要:XLVII.CF1500E Subset Trick 考虑对于每个集合大小 i,找到所有大小为 i 的集合中元素和最小的一个 li 与最大的一个 ri。则,所有 x[li,ri) 均不合法。 于是我们就要求 \(\Big|\bigcup\limi 阅读全文
posted @ 2021-04-03 13:19 Troverld 阅读(75) 评论(0) 推荐(0) 编辑
摘要:XLVI.CF1408G Clusterization Counting 很明显,将边按照权值从小到大排序后,依次用冰茶姬合并,如果任意时刻出现了团,则这个团显然是唯一合法的可能。人脑思考可得这个团之间的关系肯定是个划分树关系(即一个大团裂成许多小团的树形关系),因此总合法团数是 O(n) 阅读全文
posted @ 2021-04-03 13:18 Troverld 阅读(51) 评论(0) 推荐(0) 编辑
摘要:XLV.[HNOI2009] 梦幻布丁 线段树合并是非常显然的,但是这里我们偏不用。这里我们使用的是启发式合并——虽然这仍然非常显然。 可以使用链表做到 O(nlogn) 但是我太懒了因此直接暴力用 set 做了,是 O(nlog2n) 的不过一样也能过。 附:set 直接 阅读全文
posted @ 2021-04-02 23:17 Troverld 阅读(56) 评论(0) 推荐(0) 编辑
摘要:XLIV.CF607D Power Tree 考虑计算 x 子树中某个节点 y 对于 f(x) 的贡献,发现是 wy×zpath(y,x)degz,其中 degzz 节点的儿子数。 阅读全文
posted @ 2021-04-02 23:15 Troverld 阅读(62) 评论(0) 推荐(0) 编辑
摘要:XLIII.URAL1097. Square Country 2 考虑二分,二分后转成判定性问题,然后用扫描线+线段树处理即可。时间复杂度 O(nlog2n)。 代码: #include<bits/stdc++.h> using namespace std; int n,m,q; str 阅读全文
posted @ 2021-04-02 23:13 Troverld 阅读(33) 评论(0) 推荐(0) 编辑
摘要:XLII.[NOI2019] 弹跳 一眼看上去,单点向矩阵连边、最短路,这不是数据结构优化建图是什么? 想了想二维线段树优化建图,发现可以。 于是就写了,内层线段树写的还是可以压缩空间的线段树合并。 然后MLE了。 88 分代码: #include<bits/stdc++.h> using 阅读全文
posted @ 2021-04-02 23:11 Troverld 阅读(56) 评论(0) 推荐(0) 编辑
摘要:XLI.[NOI2017] 蚯蚓排队 算算数据范围,可以哈希,只需要将所有长度在 50 以内的串扔进哈希表,然后询问时找到对应的串的出现次数即可。 这里的哈希表必须用双哈希,其中第一维开在数组范围内,然后第二维作为链表挂在后面,因此范围可以无限大。不过因为要在 int 内处理,因此我两个模数 阅读全文
posted @ 2021-04-02 23:09 Troverld 阅读(97) 评论(0) 推荐(0) 编辑
摘要:XL.[NOI2017] 整数 首先可以想到一种用线段树维护每一位的方法:一个数 a×2b 拆成 loga 个位置上 +1,执行单点 +1 的时候如果出现进位就找到右方第一个非 1 的位置,然后单点加,区间赋 0;执行减法的时候,就是找 阅读全文
posted @ 2021-04-02 23:07 Troverld 阅读(99) 评论(0) 推荐(0) 编辑
摘要:XXXVIII.[NOI2016] 网格 首先,答案一定 2,因为四个角的跳蚤被围住只需要两个蛐蛐,而如果蛐蛐占住了一个角又会产生新的角。 1 的情形比较容易,要么空隙少于 2 个,要么仅剩的两个空隙在一起。两种情况下 n×m 都与 c 阅读全文
posted @ 2021-04-02 23:02 Troverld 阅读(234) 评论(0) 推荐(0) 编辑
摘要:XXXVII.[十二省联考2019]春节十二响 考虑一个simple的情形:假如一个点有两条链作为儿子,应该怎么样才好? 明显,同一条链上的点不能在一起,于是链上的一个点只能与另一条链上的点匹配。明显匹配应该从大往小配(两个大的配了,这样最终便少了一个较大的)。于是我们用两个堆记录两条链,每次匹配堆 阅读全文
posted @ 2021-04-02 23:00 Troverld 阅读(68) 评论(0) 推荐(0) 编辑
摘要:XXXVI.[十二省联考2019]异或粽子 好像对可持久化结构有了新的认识( 首先,我们考虑,区间异或和,可以直接被转换为前缀异或和的异或和,即 srxorsl1。于是我们考虑对于每个 sr 找到与其异或起来最大的 sl1阅读全文
posted @ 2021-04-02 22:58 Troverld 阅读(53) 评论(0) 推荐(0) 编辑
摘要:XXXV.CF36E Two Paths 为什么这题会被归到数据结构博客里呢?因为我的代码使用了大剂量的 STL。 我吹爆 list 有没有!再也不手写链表了(并不),但是在欧拉路问题上真的贼好用! 首先,覆盖所有边恰一次,妥妥的欧拉路模型。 然后就先考虑如何判无解了。怎样无解呢? 有少于 \(2\ 阅读全文
posted @ 2021-04-02 22:57 Troverld 阅读(50) 评论(0) 推荐(0) 编辑

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