12 2018 档案
摘要:"嘟嘟嘟" 看到求区间的,一个很好的思路就是转换成前缀和相减。那么这道题就是二维前缀和。 容易列出 $$\sum _ {i = 1} ^ {n} \sum _{j = 1} ^ {m} [gcd(i, j) = k]$$ 然后就是套路的推导了,跟 "这道题" 一模一样,看我的题解吧 "[POI200
阅读全文
摘要:嘟嘟嘟 [NOI2003]的其实就是一个板子……所以我就不说啥了。 唯一需要注意的是读入字符(哎……):题中说“中间可能有空格,请忽略”的意思是要在程序里特判掉,不是不管他…… 输出的时候暴力中序遍历就行。 然后[AHOI2006]的只是多了一个区间翻转,然后输出单个字符,其实还是板子。 只不过读入
阅读全文
摘要:嘟嘟嘟 看到$i$变成了$A_i$,我突然想起了置换这个东西。于是马上到网上学了一遍轮换乘法。 手模后发现轮换乘法满足结合律,但不满足交换律。 于是就可以快速幂啦。 需要注意的是每一次相乘是$O(n)$的,因此总复杂度为$O(n \log n)$。 代码一看就懂 #include<cstdio> #
阅读全文
摘要:嘟嘟嘟 这题我写的时候还是挺顺的,边写边想为啥学姐说我是“勇士”。然后我用了大半天的debug时间理解了这句话…… 先不说那几个把人坑到退役的点,光说这几个操作,其实都听基础的。 我感觉唯一要说一下的就是插入一串数:我们先把这些数建成一个splay,然后把这个splay的根节点连到对应的点的儿子节点
阅读全文
摘要:嘟嘟嘟 这道题刚开始想lct,但后来发现并没有那么麻烦。 其实就是splay + 启发式合并,同时用并查集维护连通性…… 刚开始每一个节点都属于一个splay以及一个并查集,合并的时候把小的splay拆散,往大的上一个一个添加。 因为每一次splay至少会变大一倍,所以每一个点最多被合并$log n
阅读全文
摘要:嘟嘟嘟 这是一道splay基础题。 最坑的一点是,因为有些节点可能没有左儿子或右儿子,所以必须把t[0].Max赋成-INF! 因为这个调了半天,看来回头复习复习splay是对的…… #include<cstdio> #include<iostream> #include<cmath> #inclu
阅读全文
摘要:嘟嘟嘟 看到这种区间问题和最大异或和,我刚开始想到可持久化trie(虽然我不会写)。 但是这道题给的是$b_i$ XOR \((a_j + x_i)\),好像搞不了。 不过大体思路跟普通的最大异或和还是比较像的:我们从高位向低位枚举,如果该位是$0$,就看看有没有$1$。 假设第$i$位是$0$,在
阅读全文
摘要:嘟嘟嘟 看到比值,就想到01分数规划,令$ans = \frac{\sum a_i}{\sum l_i}$,其中$l$表示长度,所以$l_i$都是$1$。 然后变一下型,得到$\sum (a_i - ans) = 0$。这就是01分数规划的标准形式了。 所以我们按套路二分,每一次数组中的元素就是$a
阅读全文
摘要:嘟嘟嘟 一看到子串排序,就想办法往后缀数组上靠。 因为后缀数组的排序和长度无关,所以我们把字符串加倍后直接一个后缀排序即可。 然后观察一下输出,其实就是$sa[i]$的上一个字符,所以排完序后如果$sa[i] \leqslant n$就输出$s[sa[i] + n - 1]$即可。 $O(n \lo
阅读全文
摘要:嘟嘟嘟 今天学了一个后缀数组,还是挺好理解的。 因为我不会基数排序,所以只会$O(n \log ^ 2 n)$的sort版。 首先,后缀数组就是把该字符串的所有后缀按字典序排序得到的一个数组。注意这个排序只有字典序一个关键字,跟长度无关。 比如ababa的后缀数组就是:5 3 1 4 2,对应的后缀
阅读全文
摘要:嘟嘟嘟 这道题其实还是挺基础的,只不过操作有点多。 区间乘和区间加按线段树的方式想。 那么就先要下放乘标记,再下放加标记。但这两个和反转标记是没有先后顺序的。 对于区间加,sum加的是区间长度$*$lazy标记。但是线段树区间固定,而lct不是,所以还要单独维护一个size。 还有一点,这个是spl
阅读全文
摘要:嘟嘟嘟 lct维护生成树。 其实要是没学lct的话,我觉得是二维spfa,但是没写不知道对不对。 用lct的话,就是先把这些遍按$a$排序,这样我们只用考虑另一维了。 对于边$<x, y>$,如果$x$和$y$不连通,直接Link即可;如果联通,那么就要从$x$到$y$的这条链中Cut一个边权最大的
阅读全文
摘要:嘟嘟嘟 挺好的LCT题。 所以我决定不拿分块水过,按正解写一发。 先新建一个虚拟节点$n + 1$,跳到这个点就说明被弹飞了。 1.建树: $i$向$min { i + k_i, n + 1 }$连边。 2.修改 断掉$i$和$min { i + k_i, n + 1 }$的边,并链接$i$和$mi
阅读全文
摘要:"嘟嘟嘟" 看完题后突然想起jf巨佬的话:“看到曼哈顿距离就想转切比雪夫距离。” 于是我就转换了一下。 然后问题变成了求 $$max_{i, j \in n} \{ max \{ |x_i x_j|, |y_i y_j| \} \}$$ 令差最大,只要分别找出$x, y$的最小值和最大值即可。 $O
阅读全文
摘要:嘟嘟嘟 写完lct的板儿后觉得这就是一道大水题。 连pushup都不用。 不过还是因为一个zz的错误debug了一小会儿(Link的时候连出自环……) 还有一件事就是Cut的时候判断条件还得加上,因为我这种写法会改变树的形态,不加后面就删错边了。 #include<cstdio> #include<
阅读全文
摘要:嘟嘟嘟 LCT竟然看了整整一天,但好歹是看懂了。 教程这里不写,强烈推荐 闪狐大佬的博客 。 但是还是有几句想说的。 1.尽管LCT和splay很像,但是有一些细节还是不一样的。首先是rotate,我们习惯性的令$y$为$x$的父亲,$z$为$y$的父亲。这时候一定要判断$y$是否为当前splay(
阅读全文
摘要:"嘟嘟嘟" 这题就是一道矩阵加速dp的水题,dp式都给你了,所以矩阵这方面就不说了。 之所以发这篇博客,是因为两数相乘可能会爆long long,所以得用快速乘。 现学了一下,感觉和快速幂特别像。 对于两个数$a, b$,按位枚举$b$,如果$b$的第$i$位为$1$,答案就加上$a 2 ^ i$。
阅读全文
摘要:嘟嘟嘟 这题就是整体二分的板儿,只不过变成二维的。 那么就用二维树状数组好啦。 至于二维树状数组,看了代码就懂了。 #include<cstdio> #include<iostream> #include<cmath> #include<algorithm> #include<cstring> #i
阅读全文
摘要:嘟嘟嘟 做了几道题之后,对整体二分有点感觉了。 整体二分的本质就是二分答案。所以这道题二分的就是次数。 然后就是套路了,把小于$mid$的操作都添加减去,然后查询,如果查询的值$x$比给定值大,就把这个询问放到左区间,否则减去$x$,放到右区间。 具体的操作,要支持区间加和单点查,第一反应是线段树,
阅读全文
摘要:嘟嘟嘟 这应该算是整体二分入门题吧。 唯一的区别就是这次是区间修改,树状数组可能不太好做,换成线段树就好了。 然后每一次别忘了清空。 #include<cstdio> #include<iostream> #include<cmath> #include<algorithm> #include<cs
阅读全文
摘要:嘟嘟嘟 整体二分是一个好东西。 理解起来还行。 首先,需要牢记的是,我们二分的是答案,也就是在值域上二分,同时把操作分到左右区间中(所以操作不是均分的)。 然后我就懒得讲了…… 李煜东的《算法竞赛进阶指南》第二版中讲的特别好,有兴趣的OIer可以拿来读读。 这里贴一个板儿。 突然想说一嘴:这道题我们
阅读全文
摘要:嘟嘟嘟 今天学了个虚树,觉得这东西挺奇特。 虚树简单来说就是保留每一次询问的关键点以及他们的lca,把其他的点从树中删去。这样如果每一次询问的复杂度为$O(n)$的话,总复杂度就是$O(\sum _ ^ k_i)$。 虚树的构建方法这里推fjzzq大佬的博客。 构建完虚树后,在虚树上dp。因为每一个
阅读全文
摘要:嘟嘟嘟 一看到异或,就想到按位处理. 当处理到第$i$位的时候,$f[u]$表示节点$u$到$n$的路径,这一位为$1$的期望,那么为$0$就是$1 - f[u]$,于是有 \(f[u] = \frac{1}{d[u]} (\sum _ {v \in V, w = 0} f[v] + \sum _
阅读全文
摘要:嘟嘟嘟 [数组越界真刺激,debug到怀疑人生] 我们可以求出每一条边的期望,然后贪心的把期望大的赋上小边权。 而对于边$e<x, y>$的期望$E(e) = \frac{E(x)}{du[x]} + \frac{E(y)}{du[y]}$。$du[x]$表示$x$有几条出边。 理解起来就是这条边的
阅读全文
摘要:嘟嘟嘟 由题意可知,我们要求一个$n$元组$(x_1, x_2, x_3, \dots, x_n)$,满足 \(\sum _ {j = 1} ^ {n} (a_{ij} - x_j) ^ 2 = r ^ 2\) 对于$\forall i \in [1, n]$都成立。 这个式子说白了就是一个$n$元
阅读全文
摘要:嘟嘟嘟 一句话:最优比率生成树。 因为是完全图,所以kruskal会TLE,还必须用prim。为此现学了一下。 prim的大概流程是这样的: 1.先随便选一个点 2.从通过这个点的所有出边更新所有点到现在的联通块的最小距离。 3.选离联通块最近的点加入块中,答案加上该条边。 4.重复第2步$n -
阅读全文
摘要:嘟嘟嘟 懒的写博客了,恰好发现自己的思路跟某一老哥极其像,所以各位还是看这篇博客吧 写的CDQ分治,感觉不是很懂,以后还得再复习一遍。 #include<cstdio> #include<iostream> #include<cmath> #include<algorithm> #include<c
阅读全文
摘要:"嘟嘟嘟" 刚开始推了一个$O(n ^ 2)$的dp方程,但是需要倒着来,然后斜率优化的时候出现了各种错误,最终还是放弃。 换一个正着来的吧。 令$dp[i]$表示在$i$建仓库时的最小花费,则 $$dp[i] = min _ {j = 0} ^ {i} \{dp[j] + \sum _ {k =
阅读全文
摘要:"嘟嘟嘟" 这道题dp式特别好想: $$dp[i] = max_{j = 0} ^ {i 1} (dp[j] + f(s[i] s[j]))$$ 其中$f(x) = ax^ 2 + bx + c$,$s[i] = \sum_{j = 1} ^ {i} x[j]$。 但是$O(n ^ 2)$过不了,需
阅读全文
摘要:"嘟嘟嘟" 如果常规dp,$dp[i][j]$表示前$i$个任务分$j$组,得到 $$dp[i][j] = min _ {k = 0} ^ {i 1} (dp[k][j 1] + (s j + sumt[i]) (sumc[i] sumc[k]))$$ 复杂度是$O(n ^ 3)$的。 因此我们要换
阅读全文
摘要:"嘟嘟嘟" 一句话题意:求带权基环树森林中每一个联通块的最长路之和,路径为简单路径。 其实这道题不难,只不过是吧好多知识拼接在了一起。 看到基环树,就会想到断环为链,为了能枚举到所有路径,要把链翻倍乘2。 现在得到了一个序列,上面的每一个点表示外向树的树根。 那么一条最长路可能有两种情况: 1.单独
阅读全文
摘要:"嘟嘟嘟" 只要会决策单调性,这题就是练手的 首先按矩形长排序,这样只用考虑宽了。 然后很容易搞出dp方程 $$dp[i] = min _ {j = 0} ^ {i 1} (dp[j] + x[i] max_{k = j + 1} ^ {i} y[k])$$ 找max可以用st表达到$O(1)$。
阅读全文
摘要:"嘟嘟嘟" 决策单调性dp。 首先dp方程很好想 $$dp[i] = min_{j = 0} ^ {i 1} (dp[j] + w(j + 1, i))$$ 其中$w(i, j) = (i j + \sum _ {i = l} ^ {j} C_i L) ^ 2$ 但是我不会四边形不等式,于是打表,发
阅读全文
摘要:"嘟嘟嘟" 令$dp[i]$表示到第$i$个数时的答案,很容易列出: $$dp[i] = dp[i 1] 10 ^ {num[i]} + (i 1) + 1$$ 其中$num[i]$表示$i$的位数。 然后看数据范围,知道这一定得用矩乘优化。可是$num[i]$是一个变量啊,这怎么办。 A了后我问坐
阅读全文
摘要:"嘟嘟嘟" 第一问是数位dp。因为我既不会数位dp也不会记搜,所以就抄了份儿代码。这个坑有时间一定要填。 第二问矩乘优化斐波那契。 没了。 (~~好像啥也没讲~~)
阅读全文
摘要:嘟嘟嘟 这道题刚开始我连dp方程都没设出来,现在想一想还是我对dp的理解不够深。 令$dp[i][j]$表示长串匹配到第$i$位,短串匹配到第$j$位时的方案数。因为题中说不让匹配成功,所以答案是$dp[n][m - 1]$。 但转移不好写,因为这个状态不够具体。应该在加一个条件:长串$s$[$1$
阅读全文
摘要:嘟嘟嘟 预备知识:对于不带权的图的邻接矩阵$G$,$G ^ T$表示两点间长度为$T$的路径的方案数。 这个其实挺好理解的,想一下开始的邻接矩阵,$G[i][j]$就表示的是$i$走1步到$j$的方案数。然后自己模拟一下两个矩阵相乘,$G[i][j]$就表示走两步的方案数。以此类推。 但是这道题边上
阅读全文
摘要:这题呀,其实除了最后筛积性函数的时候比较困难,剩下的都是套路…… 首先要想到的是所有满足条件的$\mu(gcd(i, j)) \neq 0$,然后就是暴推了。 首先得到的式子是这样的 $$ans = \sum x \mu(x) ^ 2 \sum _ {d = 1} ^ {\lfloor \frac{
阅读全文
摘要:多次询问,求 $$\sum _ {i = 1} ^ {n} \sum _{j = 1} ^ {m} lcm(i, j)$$ 题解写不动了……~~自己~~搞出来的和大佬们的都一样,就贴一发 "大佬的博客" 吧。 如果不会的话,可以先做这个弱化版的: "单次询问" 也附上一篇 "大佬的博客" 这里有几个
阅读全文
摘要:"嘟嘟嘟" 感觉这几道数论题都差不多,但这到明显是前几道的升级版。 推了一大顿只能得60分,不得不看题解。 各位看 "这老哥的题解" 吧 我就是推到他用$T$换掉$kd$之前,然后枚举$T$的。这个转换确实想不出来啊。 还有最后一句,最终的式子 $$\sum_{T = 1} ^ {n} \lfloo
阅读全文
摘要:"嘟嘟嘟" 挺好的题 $$\begin{align } ans &= \sum_{i = 1} ^ {a} \sum_{j = 1} ^ {b} [gcd(i, j) = d] \\ &= \sum_{i = 1} ^ {\lfloor \frac{a}{d} \rfloor} \sum_{j =
阅读全文
摘要:"嘟嘟嘟" 这题跟上一道题有点像,但是我还是没推出来……菜啊 $$\begin{align } ans &= \sum_{i = 1} ^ {n} \frac{i n}{gcd(i, n)} \\ &= n \sum_{d | n} \sum_{i = 1} ^ {n} [gcd(i, n) = d
阅读全文
摘要:"嘟嘟嘟" . $$\begin{align } ans &= \sum_{i = 1} ^ {n} (i, n) \\ &= \sum _ {d | n} ^ {n} \sum _ {(i, n) = d} ^ {n} d \\ &= \sum _ {d | n} ^ {n} \sum _ {(i
阅读全文
摘要:嘟嘟嘟 学完数论分块,觉得这题不难啊。(难道是我变强了?) 推式子就行。 $$\begin{align*} G(n, k) &= \sum_ ^ k \ \ mod \ \ i \ &= \sum_ ^ k - \left \lfloor \frac \right \rfloor * i \ &=
阅读全文
摘要:其实主要是想发一下线性筛的板子,包括线性筛质数,约数个数,欧拉函数和莫比乌斯函数。 有些也会有一点简单的证明。 线性筛质数就不说啦。 然后加一个筛欧拉函数。 当$i$为质数的时候,自然$\varphi(i) = i - 1$。 令$n = mp$, 当$p \nmid m$的时候,有$\varphi
阅读全文
摘要:嘟嘟嘟 上下界网络流之最小流。 建图不说啦,裸的。 在有附加源$S$和附加汇$T$的图上跑完后,删除和$S, T$相连的边。然后因为可能流多了,所以现在应该退流,于是我们从$t$到$s$跑一遍最大流就行了。 今天总算有一道1A的题了,舒服。 #include<cstdio> #include<ios
阅读全文
摘要:嘟嘟嘟 有源有汇上下界网络流之最大流。 这题建图其实不难,从$s$向每一天连容量为$[0, D]\(的边,每一天向对应的女孩连容量为\)[L, R]\(的边,每一个女孩向汇点连容量为\)[G, INF]$的边。 然后转换成上下界网络流的图:建立附加源附加汇$S, T$,计算每一个点的出入度之差后连边
阅读全文
摘要:嘟嘟嘟 上下界网络流之可行流。 对于这种矩阵的题,做过就应该知道怎么建图。 像二分图一样,左边$n$个点代表行,右边$m$个点代表列。对于点$(i, j)$的限制,就从左边第$i$个点向右边第$j$个点连边。 然后这题基本也就完事了。 建图虽然不难,但写起来比较麻烦,因为数据较小,推荐邻接矩阵存每一
阅读全文
摘要:嘟嘟嘟vjudge 上下界网络流问题一般分为两种,一是求可行流,二是求最大/最小流。这道题属于第一种。 准确说是第一种问题的板子题。 直接讲做法吧: 设从$x$到$y$有一条容量不小于$b$,不大于$c$的边。 1.从$x$向$y$连一条$c - b$的边。 2.统计每一个点的$d(i)$:\(d(
阅读全文
摘要:嘟嘟嘟 感觉fft的题重点在于推式子…… 因为$n \leqslant 5e4, m \leqslant 100$,所以可以枚举旋转的位置和增加的亮度,然后想办法在$O(1)$时间内得到答案。 令枚举到第$i$个位置时$A, B$两个手环的序列为$A_i, B_i$,此时$B_i$整体怎加了$x$亮
阅读全文
摘要:嘟嘟嘟 方案:回文子序列数 - 回文子串数。 回文子串数用manacher解决就行了,关键是怎么求会问序列数。 一个比较好的$O(n ^ 2)$的算法:对于一个回文中心$i$,$O(n)$求出以$i$为中心位置对称且字母相同的字母对数$x$,则以$i$为回文中心的回文子序列有$2 ^ x - 1$个
阅读全文
摘要:嘟嘟嘟 这应该是我的第一篇fft题解吧。 对于这道比较裸的多项式乘法题,主要思路就是推出卷积的式子,然后用fft加速。 卷积我在网上找了半天,只看到一篇博客上写了这个东西。再加上自己的脑补,觉得卷积好像就是这个式子: \(c(i) = \sum_{j = 0} ^ {i} a_j *b_{i - j
阅读全文
摘要:贴板子啦…… FFT板子:luogu P3803 【模板】多项式乘法(FFT) #include<cstdio> #include<iostream> #include<cmath> #include<algorithm> #include<cstring> #include<cstdlib> #i
阅读全文
摘要:嘟嘟嘟vjudge 树上莫队入门题,还没有修改。 刚做完糖果公园,顿时觉得这题水爆了。 注意有$a = b$的情况。 #include<cstdio> #include<iostream> #include<cmath> #include<algorithm> #include<cstring> #
阅读全文
摘要:嘟嘟嘟 树上莫队。 要会树上莫队,得先会树上分块,A了王室联邦再说。(欢迎查看我的题解) 其实树上莫队和线性的莫队很像,大体思路完全一样:先把询问分块,然后按块排序。接着如果带修改的话就维护三个指针,否则两个。 但是有一个区别,就是移动指针的时候该怎么移。线性莫队往左往右移并且统计答案就行了。但是树
阅读全文
摘要:嘟嘟嘟 学树上莫队的时候给我推了糖果公园,然后题解说最好先把这道题做了,于是我就来了 这道题好像就是所谓的树上分块。 题中的限制很宽,只要输出任意一种合法方案就行。那么在dfs的时候自然能想到如果当前子树大小大于$B$的话,就把这个子树分成一块。 但这么做肯定不对,因为如果只扣掉一棵子树的其中一部分
阅读全文
摘要:嘟嘟嘟 莫队板子。 记住:删除是先删除再移动,添加是先移动在添加! #include<cstdio> #include<iostream> #include<cmath> #include<algorithm> #include<cstring> #include<cstdlib> #include
阅读全文
摘要:嘟嘟嘟 一眼就知道是莫队。 还不带修改,美滋滋。 按莫队的方法排序,然后用小学数学算一下概率,分子分母单独维护。 #include<cstdio> #include<iostream> #include<cmath> #include<algorithm> #include<cstring> #in
阅读全文
摘要:嘟嘟嘟 这题原本莫队能过,自从某谷加强数据后好像就只能80了。 但这并不重要。 (其实写这篇博客只是想记录一下莫队板子) 莫队,总而言之,离线,排序,暴力。 #include<cstdio> #include<iostream> #include<cmath> #include<algorithm>
阅读全文
摘要:嘟嘟嘟 带修改莫队。 以前学过没懂,今天又学了一遍竟然会了。 其实他跟普通莫队相比,就多了一维:时间。 首先也是都离线。 然后对于每一个询问,记录这几个信息: 1.左右端点。 2.询问编号。(为了输出答案) 3.时间编号。 然后把询问排序。这个和无修改莫队一样,第一关键字是左端点所在块,第二关键字是
阅读全文
摘要:嘟嘟嘟 有谁能想到这题会用到主席树呢?(不愧是WJMZBMR出的题) 首先考虑如果区间是固定的话,中位数该怎么求。 没错,二分。如果大于当前二分值$mid$的数比小于$mid$的数多,说明$mid$还可以再变大,向右二分;否则向左二分。 如果我们把小于$mid$的数都标记成$-1$,大于的标记成$1
阅读全文
摘要:嘟嘟嘟 区间第$k$大扯到树上啦 但是不要慌,仍是不难,仔细想一下就行了。 主席树中的每一棵线段树维护的是一个前缀的答案。利用这一点,把前缀放到树上的话,就是每一个节点到根节点的答案。 所以主席树就建出来啦。 对于每一组询问$(x, y, k)$,令$z = lca(x, y)\(,则\)(x, y
阅读全文
摘要:嘟嘟嘟 一句话题意:带修改区间第$k$小。 不修改都会,主席树板子。但是有修改就要比较深入的理解主席树了。 众所周知,主席树中以$i$为根的线段树维护的是$[1, i]$这个前缀的权值,因此若修改一个点$a[x]\(,必须把\)[x, n]$的线段树全修改了,单次修改复杂度为$O(n \log)$,
阅读全文
摘要:嘟嘟嘟 很显然是主席树啊。 首先要稍微想想:主席树的板子是单点插入,区间查询,而区间询问是用的是前缀和相减。但这道题是区间修改,单点查询。插入和查询操作是相反的。 那么就能想到前缀和的逆运算——差分。首先把修改区间拆成$L$和$R + 1$两个时间点,然后按时间排序,遇到$L$就把对应的优先级$+1
阅读全文
摘要:某谷链接 发一篇博客记录一下主席树板子。 别忘了输出原数组中的元素,而不是离散化后的。 #include<cstdio> #include<iostream> #include<cmath> #include<algorithm> #include<cstring> #include<cstdlib
阅读全文
摘要:嘟嘟嘟 嗯。 splay维护哈希。 如题,用splay维护哈希,查找的时候二分。所以复杂度是取决于询问复杂度:\(O(n \log^ 2{n})\)。 这道题还有一个技巧,就是一个节点记录的是他的子树的哈希值,所以树的的形态改变的同时,每一个节点记录的哈希值也在改变。在pushup的时候,应该这么写
阅读全文
摘要:嘟嘟嘟 突然觉得splay挺有意思的…… 这道题只有一个任务:区间翻转。 首先应该知道的是,splay和线段树一样,都可以打标记,然后走到每一个节点之前先下传。 那怎么打标记呢?还应该有“区间”的思想。 对于区间$[L, R]$,想办法把这个区间所在的子树提取出来,然后打个标记即可。 那怎么提取呢?
阅读全文
摘要:嘟嘟嘟 splay++…… 这真是一道好题…… 刚开始我困扰了好久,因为前几道题都是以权值为关键字建树的,但是这题显然不是。 后来才知道这题是以位置为关键字,即对于当前节点$now$,$now$的左子树表示位置在$now$之前的,右子树表示位置在$now$之后的,即左子树的大小$+$$1$就是节点$
阅读全文
摘要:嘟嘟嘟 突然觉得splay挺有意思,唯一不足的是这几天是一天一道,debug到崩溃。 做了几道平衡树基础题后,对这题有莫名的自信,还算愉快的敲完了代码后,发现样例都过不去,然后就陷入了无限的debug环节了……算了,伤心的事就别再提了。 说一下这题怎么做: 1.插入 不说了 void insert(
阅读全文
摘要:嘟嘟嘟 $splay$我又来了 1.插入结点:正常操作,不说了。 1.全局加减:单开一个变量表示变化量即可,不用区间修改打$lazy$标记。 2.删除小于$x$的数:找$x$的后继(包括自己),然后把$x$旋到根,删除左子树即可。 3.查询第$k$大的数:如果$k$小于右子树大小,到右子树去找;否则
阅读全文
摘要:嘟嘟嘟 看完题,思路一秒就出来了:建两棵平衡树,分别维护宠物和领养者。然后就是正常的插入,找前驱后继,删除操作了。 然后旁边的lba巨佬说只用建一棵就行,如果宠物多了就维护宠物,否则维护领养者。 总而言之这就是一道板儿题。 然而我刚学$splay$啊! 于是一上午就这么过去了。 旋转,插入,找前驱后
阅读全文

浙公网安备 33010602011771号