随笔分类 -  数据结构——树状数组/线段树/ST表

摘要:I.IV.[WC2010]重建计划 咋感觉这篇博客里的题全可以用一些奇奇怪怪的方法水过去啊喂 首先,淀粉质+单调队列按秩合并的算法就不说了,有兴趣的可以参见本人的题解,如果能够证明或证伪该做法那更好。 现在考虑长链剖分的做法。 首先,其明显是0/1分数规划的场景,直接套上二分转判定性问题。 之后,我 阅读全文
posted @ 2021-04-09 14:32 Troverld 阅读(103) 评论(0) 推荐(0) 编辑
摘要:I.CF487E Tourists 用这题作圆方树的入门题还是很合适的。 首先,先建出圆方树出来。我们可以给方点赋一个权值,即为它连着的所有圆点的权值的min。然后只需要在圆方树上查询路径min即可。使用树剖即可。 但这个做法会被叉掉:当原图是一张菊花图时,花心的圆点将会连向n1阅读全文
posted @ 2021-04-06 13:39 Troverld 阅读(43) 评论(0) 推荐(0) 编辑
摘要:V.III.[CTSC2018]混合果汁 二话不说先套个整体二分。 但是这题整体二分与先前两道题有所区别——前面两道题,当二分到区间 [l,r] 时,只需管 [l,r] 中的元素就行了,对于 mid 不合法的询问直接减去这一段的询问的结果就行了; 但是,本题就不一样了:随着美 阅读全文
posted @ 2021-04-06 10:56 Troverld 阅读(80) 评论(0) 推荐(0) 编辑
摘要:V.II.[国家集训]矩阵乘法 整体二分,然后套上二维BIT统计就行了。 需要注意的是整体二分时,要注意哪里是“编号”,哪里不是!(放在代码中就是哪里的东西外面要套上一层 p[]) 时间复杂度 O(mlogmlog2n)。 代码: #include<bits/stdc++.h> us 阅读全文
posted @ 2021-04-06 10:54 Troverld 阅读(46) 评论(0) 推荐(0) 编辑
摘要:V.I.[POI2011]MET-Meteors 套上整体二分,然后用BIT统计区间里每个国家收到多少陨石就行了。 听说有人还有用线段树上二分之类奇怪的东西,但是真的没有必要。 时间复杂度 O(nlog2n)。 代码: #include<bits/stdc++.h> using name 阅读全文
posted @ 2021-04-06 10:52 Troverld 阅读(36) 评论(0) 推荐(0) 编辑
摘要:III.IV.[HDU3842][WF2011]Machine Works 我们设 fi 表示第 i 台机器被购买时,所剩最多钱数。则 fi=maxdj<di{fj+(didj1)gj+rjpi} 其可被拆作 阅读全文
posted @ 2021-04-06 10:37 Troverld 阅读(71) 评论(0) 推荐(0) 编辑
摘要:III.III.CF932F Escape Through Leaf 明显DP式很容易写出;然后观察发现其就是子树中一堆函数 y=kx+b 中对于某个 xy 的最小值,于是线段树合并李超树就OK了。 需要注意的是,李超树因为每个节点都存了一条直线(相当于标记永久化),因 阅读全文
posted @ 2021-04-06 10:35 Troverld 阅读(90) 评论(0) 推荐(0) 编辑
摘要:III.II.[SDOI2016]游戏 明显,一条从 xy 的路径可以被拆作两条从LCA下来的路径,并且路径上每个点被写上的数是关于其深度的一次函数。 于是就树剖套李超树就行了。 但是有个问题,李超树不是只支持单点询问吗,怎么这里又支持区间了呢? 我们发现,对于一条线段,其与我 阅读全文
posted @ 2021-04-06 10:33 Troverld 阅读(63) 评论(0) 推荐(0) 编辑
摘要:III.李超线段树 李超线段树是一种可以维护动态凸包的线段树。更准确地说,其可以支持的常规操作有两种: 在平面直角坐标系中插入一条线段。 询问在坐标系中的一个点 (x,+) 向下看,能看到的点的坐标。换句话说,是一条自无穷高处引下的垂线与所有线段的交点中最高的那个点。 其具体实现 阅读全文
posted @ 2021-04-06 10:32 Troverld 阅读(135) 评论(0) 推荐(0) 编辑
摘要:II.I.CF1290E Cartesian Tree 并非一道很板的题,但是是可以被想出的。 考虑把笛卡尔树求出其中序遍历,则每个节点的子树是上面一段区间 [li,ri]。 考虑往中序遍历序列中某个位置 p 之后插入一个数 k。显然,依照定义,这个数必定大于原序列中所有 阅读全文
posted @ 2021-04-06 10:30 Troverld 阅读(82) 评论(0) 推荐(0) 编辑
摘要:II.吉司机线段树 吉司机线段树是一类支持区间所有数对某个数取 min,以及所有其它线段树操作的线段树。 我们以区间取 min、区间求和为例。 其具体实现是,在线段树的每个节点上存储区间最大值、区间次大值、区间最大值出现次数、区间和。显然,所有东西都可以简单维护。 然后,考虑区间 阅读全文
posted @ 2021-04-06 10:28 Troverld 阅读(328) 评论(1) 推荐(0) 编辑
摘要:I.V.[FJOI2018]领导集团问题 这题的难点主要是在状态的设计上。 首先,一个naive的想法是设 fi 表示节点 i 子树中,强制节点 i 选择的最优答案,然后使用线段树合并转移。 但是这样在合并不同子树时会出大问题。于是我们不得不更换状态。 于是我们设 \(f_ 阅读全文
posted @ 2021-04-06 10:26 Troverld 阅读(60) 评论(0) 推荐(0) 编辑
摘要:I.IV.[NOI2020]命运 半年前水了份 n2 暴力,没想到过了出题人用脚造的数据。这里是正解。 考虑DP。因为若两条路径呈包含关系,则更长的那条显然没用,于是设 fi,j 表示所有下端在 i 子树内且未被满足的路径中,上端最深的那条的深度。明显,要且仅要满足这 阅读全文
posted @ 2021-04-06 10:24 Troverld 阅读(87) 评论(0) 推荐(0) 编辑
摘要:I.III.[PKUWC2018]Minimax 看错题+理解错题,成功自闭一整晚 首先,一上来我们就能想到,如果用一个数组来表示每个节点所有可能出现的值及其概率,就会比较轻松。而因为树上父节点的数组是由两个子节点的数组合在一起转移而来的,所以考虑用线段树合并来维护该数组。 显然,没有儿子时转移很轻 阅读全文
posted @ 2021-04-06 10:22 Troverld 阅读(59) 评论(0) 推荐(0) 编辑
摘要:I.II.[ZJOI2019]语言 一开始看错题,以为同一种语言会被普及多次,然后就成了神题不会做。一看题解,发现自己看错题了,原来是垃圾题。 一个点所能到达的点,只有与它在同一条路径上出现过的点,换句话说就是经过它全部路径的并。 全部路径的并很好搞,就是全部路径端点建出虚树的大小。虚树大小也很好搞 阅读全文
posted @ 2021-04-06 10:21 Troverld 阅读(69) 评论(0) 推荐(0) 编辑
摘要:I.I.[POI2011]ROT-Tree Rotations 可以发现,你无论如何交换某个节点里的儿子们,该节点子树内每个数的数量都是不变的。 于是我们考虑类CDQ分治的思想——先计算儿子内部最小逆序对数,然后再在父亲处计算两个儿子之间的最小逆序对数。 因为保证叶节点上的东西是排列,所以设左儿子的 阅读全文
posted @ 2021-04-06 10:18 Troverld 阅读(51) 评论(0) 推荐(0) 编辑
摘要:VIII.CF633H Fibonacci-ish II 强烈谴责卡常屑题( 莫队。于是要支持插入数、查询与斐波那契数列的点积和。 离散化后就直接在线段树上处理。于是变成单点插入/删除(这个很 easy)以及后缀斐波那契数列前移/后移。 直接上矩阵维护。但是会TLE(因为常数是 23)。预 阅读全文
posted @ 2021-04-06 10:14 Troverld 阅读(55) 评论(0) 推荐(0) 编辑
摘要:XXIX.CF1195F Geometers Anonymous Club 闵可夫斯基和是关于两个凸包的运算,其几何意义是所有来自两个凸包内部的向量之和所构成的集合。 可以被证明的是,两个凸包的闵可夫斯基和,可以通过对两个凸包上的边按照极角大小排序后依次首尾相接得到。 回到本题。依照我们上述理论,我 阅读全文
posted @ 2021-04-05 20:57 Troverld 阅读(56) 评论(0) 推荐(0) 编辑
摘要:XXVIII.[TopCoder12693]EnclosingTriangle 经典套路是固定一个点,求出所有合法的剩余两个点。 为了方便,我们将环状的图形拆开,拆成 4n 个点。然后,我们枚举一个点 i 明显发现,剩下两个点必定位于 i 两侧的一端区间内,不妨设一半是 \( 阅读全文
posted @ 2021-04-05 20:55 Troverld 阅读(74) 评论(0) 推荐(0) 编辑
摘要:XXIV.「SWTR-04」Taking a Walk 题解 阅读全文
posted @ 2021-04-05 20:45 Troverld 阅读(34) 评论(0) 推荐(0) 编辑

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