随笔分类 - 数据结构
摘要:"题面" 题解 提供两种方法 线段树分治 将一个物品可以购买的时间区间打到线段树上 考虑对于每一个点如何算贡献 从线段树的根开始做 01 背包 向下递归时记得撤销不同区间的影响 这样每一次询问只会算 $log(t)$ 次, 每一个物品, 只会在 $log(t)$ 段区间中被计算 每次计算的复杂度是
阅读全文
摘要:"题面" 题解 考虑到固定左端点, 那么所有的区间的 $gcd$ 最多只有 $log$ 种取值 证明: 从左至右. 若 $gcd$ 变化, 每次至少都会 $/ 2$ 对于每一个左端点二分找这个位置, ST 表查询区间 $gcd$ Code
阅读全文
摘要:"题面" 题解 可以发现, 若 $u$ 到 $v$ 可由从 $u$ 到 $v$ 的另外一条路径而不走 $(u, v)$ 边到达, 则 $(u, v)$ 可删 正反用 bitset 维护一下传递闭包即可 Code
阅读全文
摘要:"题面" 题解 首先假设每个娃都不套, 那么代价就是 $\sum_{i=1}^{n}b_i in_i$ 然后每次将 $j$ 套进 $i$ 中会减去 $b_i out_j$ 的代价 发现将 $b$ 排序后拿个数据结构维护一下最大的小于等于当前的 $in_i$ 的 $out_j$ 证明直接拿两个套娃,
阅读全文
摘要:"题面" 题解 设第 $k$ 个女性的如意郎君列表长度为 $len$ , 那么我们选择这其中第 $i$ 位的概率是 $$ \displaystyle\begin{aligned}&p (1 p)^{i 1} \sum_{j = 0}^{\infty}(1 p)^{j len}\\=&\frac{p
阅读全文
摘要:"题面" 题解 经典套路, 用树上前缀和的方式建出可持久化 Trie 树 询问就树上差分一下就行 Code
阅读全文
摘要:"题面" 题解 首先我们得先知道一个小结论, 就是说如果最优方案中最大值和最小值必定是在区间两端 要么就是这两个数在长度为 $L$ 的区间中 那么我们用 ST表处理出长度为 $L$ 的区间中最优的答案 接下来处理两个数在区间首尾的方案 假设区间右端是最大值, 左端是最小值 左端最大右端最小把数组 $
阅读全文
摘要:"题面" 题解 不想写了 "嘿嘿嘿" Code
阅读全文
摘要:"题面" 题解 我们发现经过若干次操作后这些数的相对大小都不会变 排序之后, 就只有一段前缀改为 L , 或一段后缀改为 R 了 考虑这样一个函数 $$ \displaystyle\\f(a_1, a_2, a_3) = a_1 c_i + a_2 a_i + a_3 $$ 其中 $c_i$ 代表
阅读全文
摘要:"题解" 题解 分治不会, 但是会分块(滑稽) 设 $f[i][j]$ 为第 $i$ 块, $0 \to j$ 中最大的是多少 设 $g[i][j]$ 为第 $i$ 块, 膜 $j$ 最大的是多少 把值域分为 $\frac{S}{j}$ 块, $S$ 为值域大小, 对于每一块中膜 $j$ 的最大值取
阅读全文
摘要:"题解" 题面 左偏树练习题吧 改权值的操作就是把这个点扯出来, 左右儿子合并后接到这个点的父亲上去, 然后再把这个点重新塞进左偏树里就行了 至于这部操作为什么不要更新 dis , 可能是因为 dis 最多只会变 1 , 左偏的性质还是存在吧 Code
阅读全文
摘要:"题面" 题解 ~~这个数据范围明显就是莫队嘛, 为啥不让我的莫队过啊~~ 考虑主席树, 每次往区间内数的个数大于要求的那一边走 若没有, 代表没有满足要求的数 如果能走到 $l = r$ , 那么这个数 $l$ 就是我们要求的数了 Code
阅读全文
摘要:"题面" 题解 题目意思比较简单, 就不在这里赘述了 本着练习平衡树的思路, 我把方法尝试往上面去套, 结果想不出 只能弃掉平衡树 最后想出来的方法是这样的 我们运用类似于高维前缀和那样一维一维加上去的方法 先横着统计在某个范围内和最小的 $c d$ 矩阵, 把贡献算在范围的右下角 注意, 这里保证
阅读全文
摘要:"题面" 题解 题面很清楚 问题是要怎么做 其实就是查询一个动态集合的第 $k$ 大 每次合并就把两个集合黏在一起就行了 我们可以想到用 splay 来写, 启发式合并一下就行 还有一种思路是权值线段树合并 每一次连边就相当于是一次合并 好像确实没有什么很难想的地方, 思路很顺啊 就是线段树合并的复
阅读全文
摘要:"题面" 题解 很显然的思路就是对于每一个点分开计算他对答案的贡献 这样会造成贡献的便只有他子树内的点了 贪心地选择最小的直到他们的和 $ m$ 现在问题在于怎么求子树内的这个东西, 并且如何合并 可以可并堆, 也可以 splay 启发式合并(我已开始想写, 以为启发式合并很难想, 结果最后就是一个
阅读全文
摘要:"题面" 题解 李超线段树 为了与机房大佬 HYJ 同步伐 学习笔记请移步 "yyb的博客" Code
阅读全文
摘要:"题面" 题解 upd : $cnt_i$ 代表值为 $i$ 的个数 我们可以暴力枚举众数 $k$ 把等于 $k$ 的赋值成 1 , 不等于 $k$ 的赋值成 1 这样原序列就变成了一段折线 我们把他剖开一段一段来分析 这些蓝线的左右端点分别为, 一个值为众数的数的位置, 和它下一个值为众数的数的位
阅读全文
摘要:"题解" 题面 如果没有换根操作就直接上树剖加线段树即可 考虑换根操作如何转化 记当前的根节点为$root$ 子树查询和子树修改类似, 在此只讨论子树查询, 假设当前要修改的是$u$子树 若$u = rt$, 直接修改整棵树即可 若$rt$是$u$的祖先或$rt$和$u$在原先为$1$的两棵不同子树
阅读全文
摘要:题面 "[HNOI2014]世界树" 题解 从数据范围很容易看出是个虚树DP(~~可惜看出来了也还是不会做~~) 虚树大家应该都会, 不会的话自己去搜吧, 我懒得讲了, 我们在这里只需要考虑如何DP即可 首先我们需要求出每个点被哪个点所控制, 设$u$点被$bl[u]$所控制, 两遍DFS即可, 考
阅读全文