/* 返回顶部 */

随笔分类 -  数据结构

摘要:gate 发现这道题以前没写题解…… 首先可以看出是并查集。 物种间有同类、吃、被吃三种关系。 除了要记录物种,还要记录种间关系。 这时就要用到种类并查集。这是一种带权并查集,其中每个节点要记录它与父节点的关系,这个关系在经过路径压缩后是不变的。 设这个权值为$d$,则有 \(d[x]-d[y]=0 阅读全文
posted @ 2021-10-27 09:08 Mogeko 阅读(72) 评论(0) 推荐(0)
摘要:gate 有向图求最短路,需要进行三种操作: 点向点连边 点向区间连边 区间向点连边 用线段树优化建图可以解决。 建立两棵线段树,一棵存入边,一棵存出边 入边: 出边: 所以线段树看起来应该是这样子的: 线段树内的边权为$0$。 code #include<cstdio> #include<iost 阅读全文
posted @ 2020-08-05 20:59 Mogeko 阅读(255) 评论(0) 推荐(0)
摘要:gate 有$p_i$的概率取最大,$1-p_i$的概率取最小。 首先把权值离散化 每个节点开一棵线段树,记录每个权值被取到的概率。 对于线段树$i$,设两个子树为$ls,rs$,取到值$j$的概率$f[i][j]$ \(f[i][j] = \\ f[ls][j]*(\sum\limits_{k=1 阅读全文
posted @ 2020-07-30 22:44 Mogeko 阅读(154) 评论(0) 推荐(0)
摘要:gate 线段树合并 设两个要合并的线段树为$a$,\(b\), 若$a$或$b$不存在,则返回另一个。 否则,将$b$的数值累加到$a$上,并返回$a$。 代码如下 int merge(int a,int b,int l,int r) { if(!a) return b; if(!b) retur 阅读全文
posted @ 2020-07-27 17:50 Mogeko 阅读(162) 评论(0) 推荐(0)
摘要:gate 用时:40min(看题解了) 线段树,然而思路不太好想,考虑看题解 每个公路有一个拥堵值$a[i]$,如果当前时间能被$a[i]$整除,那么通过这条公路需要$2$分钟,否则需要$1$分钟,$2 \le a[i] \le 6$ 由于$a[i]$的范围很小,$lcm(a[i])$的最大值只有$ 阅读全文
posted @ 2020-07-03 10:39 Mogeko 阅读(130) 评论(0) 推荐(0)
摘要:gate 用时:看题解一上午,写代码120min 省选打完了,继续停课... gg说要做历年省选题,还要看博客...公开处刑... 每个$modify$操作会复制1倍线段树并修改。 然而实际上不需要维护那么多线段树,维护1棵并在树上dp即可。 对于不同状态的节点有不同的维护操作,需要分类讨论。 (L 阅读全文
posted @ 2020-06-22 18:03 Mogeko 阅读(192) 评论(0) 推荐(0)
摘要:gate 这是一道虚树的模板题。首先来介绍一下什么是虚树。 虚树,顾名思义,是一棵原本不存在的树。 虚树DP的标志是:一棵$n$个点的树,给出$k$个关键点(\(\sum k<\frac{n}{2}\)),求使这些点互不连通的最小代价。 可以发现,答案只与这些点和他们的$LCA$有关。 所以,可以通 阅读全文
posted @ 2020-03-25 10:29 Mogeko 阅读(260) 评论(0) 推荐(0)
摘要:"gate" 还算好想的一个树链剖分+线段树... 修改一段路径的颜色直接区间修改即可。 询问颜色段数量时,线段树的每个节点记录这一段有多少个颜色段。 pushup和query时要检查mid和mid+1是否颜色相同, 例如 递归路径时要检查top[x]和fa[top[x]](两条路径的交界处)是否颜 阅读全文
posted @ 2020-03-24 08:47 Mogeko 阅读(138) 评论(0) 推荐(0)
摘要:gate 当一个数列满足,但它的1,2项不是1,1时, 称它为类斐波那契数列。 它满足以下性质: 若有: 1.设,则 2. 证明: 设,则 3.前缀和公式: 证明: 通过以上性质,发现它可以用线段树维护。 对于每个节点,$sum$表示区间和; $c1$,$c2$表示这段区间被加上了前两项分别为$c1 阅读全文
posted @ 2020-03-04 17:12 Mogeko 阅读(212) 评论(0) 推荐(0)
摘要:gate 我回来了... 本来是应该12月发的blog,没想到拖到了现在,注意事项什么的稍微有点忘了,以后再慢慢补充吧 点分治是一种树上算法。顾名思义,就是对每个点进行分治,计算它的子树对答案的贡献。 主要用于处理树上路径,且一个点会被统计多次的问题。 以这道题为例: 询问树上距离为k的点对是否存在 阅读全文
posted @ 2020-02-06 11:52 Mogeko 阅读(165) 评论(1) 推荐(0)
摘要:gate 二维树状数组,区间修改,区间查询 对于区间$(x,y)$,用差分数组来维护,每次从$(1,1)$加到$(i,j)$ 可以发现,$t[1][1]$被加了$x*y$次,$t[1][2]$被加了$(x-1)*y$次… 那么区间$(x,y)$的和即为 $∑i=(1,x)∑j=(1,y)$ $t[i 阅读全文
posted @ 2019-11-12 16:40 Mogeko 阅读(250) 评论(0) 推荐(0)
摘要:gate 并查集! 对于一段区间(L,R),若有奇数个一,则(1,L-1)和(1,R)奇偶性一定不同,反之亦然。 把奇偶性相同的区间连起来。 如果将i和i+N视为相反的状态, 假设A和B的奇偶性相同,则合并A,B,A+N,B+N。 不同,则合并A.B+N,A+N,B。 那么,每次给出一个回答,合并前 阅读全文
posted @ 2019-11-12 14:02 Mogeko 阅读(191) 评论(0) 推荐(0)
摘要:gate 区间修改,单点查询 用差分维护。 因为查询返回了(1,x)的和,所以查询的时候直接查x就可以了。 至于修改,就要在区间开始加上,结尾减去,即(x,k),(y,-k) 代码如下 #include<cstdio> #include<iostream> #include<cmath> #incl 阅读全文
posted @ 2019-11-11 19:49 Mogeko 阅读(139) 评论(0) 推荐(0)
摘要:gate 二维树状数组板子?qwq 注意下标不要从0开始 代码如下 #include<cstdio> #include<iostream> #include<cmath> #include<cstring> #define MogeKo qwq using namespace std; #defin 阅读全文
posted @ 2019-11-11 15:10 Mogeko 阅读(187) 评论(0) 推荐(0)
摘要:传送门 作为给dtx的妹子讲题的交换他给我讲的 果然线段树最可爱了w 扫描线可以用来求矩形的面积并… 一个平面上有一些有重叠的矩形,求他们的并集的面积。 直接放网上的图了x 对于每个矩形,将y坐标拆成两个修改操作(插入和删除),从下到上排序; 将x坐标unique离散化,从左到右排序,用线段树维护切 阅读全文
posted @ 2019-11-05 20:15 Mogeko 阅读(306) 评论(0) 推荐(0)
摘要:传送门(已毁) 老板的题qaq 题目描述 n 个星球,有 m 条星球与星球之间的双向航道。(莫得航道的两个星球不可互相到达) 可以进行如下操作: 生成 Ti​ 个生物到一个星球 Xi​,并给定这些生物的智商程度 Yi​ 破坏一条航道,航道编号为 Si​ 询问给定的一个星球 Xi​ ,从 Xi​ 出发 阅读全文
posted @ 2019-10-25 14:55 Mogeko 阅读(146) 评论(0) 推荐(0)
摘要:传送门 这是一个莫队板子qwq 莫队是一种离线暴力算法,每次通过调整当前询问和上次询问的区间的不同的左右端点,并修改答案。 可以看出,调整的越少跑得越快,所以每次先把询问的左右端点排个序,按左端点分块,块相同的按右端点排序 (玄学) 代码如下 #include<cstdio> #include<io 阅读全文
posted @ 2019-07-27 09:49 Mogeko 阅读(159) 评论(0) 推荐(0)
摘要:传送门 给出一个1到n的全排列,求经过m次局部升/降序排序后,第q位上的数字。(n.m≤1e5) 正解是:二分答案+线段树 (????WTF) 因为n很小,所以可以用二分答案枚举第q位上的数字。 把比二分的这个数mid小的数字全部改为0,其他的改为1,然后对01序列进行计数排序——即统计1的个数,然 阅读全文
posted @ 2019-07-24 13:05 Mogeko 阅读(173) 评论(0) 推荐(0)
摘要:传送门~ 树链剖分,顾名思义,就是把树分成链。 通过这个方法,可以优化对树上两点间路径、某一点子树的修改和查询的操作,等。 流程 $dfs1()$ 在这个函数中,要处理出每个节点的: 深度dep[] 父亲fa[] 大小siz[] 重儿子编号hson[] 一个节点的siz[],是包括它自己、它的儿子、 阅读全文
posted @ 2019-07-23 11:35 Mogeko 阅读(182) 评论(0) 推荐(0)
摘要:传送门 我居然把swap写成了switch 如果路径相交,那么一定有LCA(a,b)在路径c,d上,或LCA(c,d)在路径a,b上 如果x在路径a,b上,需要满足条件: dpth[x] >= dpth[LCA(a,b)] LCA(a,x)=x 或 LCA(b,x)=x 就这样,求出LCA后分别判断 阅读全文
posted @ 2019-07-21 14:45 Mogeko 阅读(148) 评论(0) 推荐(0)