hihocoder1954 : 压缩树】的更多相关文章

传送门 首先求出缩一个点 $x$ 的贡献,就是缩 $x$ 的父亲的贡献加上 $x$ 的子树多减少的深度 假设此时缩父亲的贡献已经考虑过了,那么 $x$ 的子树多减少的深度就是子树的节点数 注意此时要满足 $x$ 不是根节点或根节点的儿子,不然缩和没缩是一样的 设这个贡献为 $sum[x]$ 然后把所有操作 $l,r,v$ 离线,遇到一个操作左端点就把 $v$ 插入 $set$,遇到右端点再取出,在过程中动态维护总贡献 考虑把每个当前加入的节点搞一个虚树 对于一次缩节点的操作,如果它不在虚树链上,…
题意 有一棵 \(n\) 个节点且以 \(1\) 为根的树,把它复制成 \(m\) 个版本,有 \(q\) 次操作,每次对 \([l, r]\) 这些版本的 \(v\) 节点到根的路径收缩起来. 收缩 \(v\) 也就是把 \(v\) 到根路径上(除了根)所有点的父亲都变成根. 最后查询每个版本的每个点的 \(dep\) 之和. 数据范围 \(n, m, q \le 2 \times 10^5\) 题解 操作顺序是无所谓的,我们假设操作了点集 \(S\) ,那么最后被缩上去的点其实就是 \(\{…
因为很懒,没有时间,只会口胡等等原因,所以有些题目就不打code了 $luogu:$ P1973 [NOI2011]Noi嘉年华: 时间离散化,预处理一个区间$[l,r]$内的最多活动个数$in[l][r]$ 无限制: 设$f[i][j]$表示到第$i$个时间点,第一个会场开$j$个活动时,第二个会场的最大活动数量 $f[i][j]=max(f[k][j-in[k][i]],f[k][j]+in[k][i])$ 有限制: 把时间分成三段,上面的dp倒着跑一遍得出$g[i][j]$ 枚举必须取区间…
比较复杂的一题.. 不管是二分答案还是直接做,都需要压缩树链 /* 给定n种怪物,每个怪物有属性a[i] 打死第i种怪物后,第i只怪物会分裂成a[i]个第i-1种怪 如果打死的是第1种,那么获得经验a[1] 现在遇到的是一只第n种怪,有体力w,打死一只怪要一点体力,问最多获得多少经验 直接求比较麻烦,由于答案具有单调性,所以二分答案即可 */ #include<bits/stdc++.h> using namespace std; #define ll long long #define IN…
前面几篇关于数据库底层磁盘文件读取,数据库索引实现细节进行了深入的研究,但是没有串联起来的讲解为什么数据库索引会采用B树和B+树而不是其他的数据结构,例如平衡二叉树.链表等,因此,本文打算从数据库文件存储以及读取说起,讲解数据库索引的由来. 我们以抛出问题的形式开始讲解: (1)数据库文件存储的方式     数据库文件存储都是以磁盘文件存储在系统中的,这也是数据库能持久化存储数据的原因. (2)从数据库读取数据的原理        从数据库读取数据,先暂且不考虑从缓存中读取数据的情况,那就是从磁…
1.     单值查找radix_tree_lookup 函数radix_tree_lookup执行查找操作,查找方法是:从叶子到树顶,通过数组索引键值值查看数组元素的方法,一层层地查找slot.其列出如下 void *radix_tree_lookup(struct radix_tree_root *root, unsigned long index) {     unsigned int height, shift;     struct radix_tree_node *node, **s…
简单的理解deflate算法 最近做压缩算法. 用到了deflate压缩算法,  找了很多资料,  这篇文章算是讲的比较易懂的, 这篇文章不长,但却浅显易懂, 基本上涵盖了我想要知道的所有要点. 翻译出来, 留存.    可能对正在学习或者准备学习deflate算法的童鞋有所帮助. 先说一下deflate算法吧.  deflate是zip压缩文件的默认算法.   其实deflate现在不光用在zip文件中, 在7z, xz等其他的压缩文件中都用.   实际上deflate只是一种压缩数据流的算法…
B-Tree就是我们常说的B树,一定不要读成B减树,否则就很丢人了.B树这种数据结构常常用于实现数据库索引,因为它的查找效率比较高. B-Tree与二叉查找树的对比 我们知道二叉查找树查询的时间复杂度是O(logN),查找速度最快和比较次数最少,既然性能已经如此优秀,但为什么实现索引是使用B-Tree而不是二叉查找树,关键因素是磁盘IO的次数. 数据库索引是存储在磁盘上,当表中的数据量比较大时,索引的大小也跟着增长,达到几个G甚至更多.当我们利用索引进行查询的时候,不可能把索引全部加载到内存中,…
选项配置说明 选项书写格式 选项说明 :se[t] 显示所有被改动的选项 :se[t] all 显示所有非 termcap 选项 :se[t] termcap 显示所有 termcap 选项 :se[t] {option} 置位布尔选项(开启) 显示字符串或数值选项 :se[t] no{option} 复位布尔选项(关闭) :se[t] inv{option} 逆转布尔选项的值 :se[t] {option}={value} 将 {value} 附加到字符串选项里, {value} 加到数值选项…
# -*- coding: utf-8 -*- """ Auto Encoder Example. Using an auto encoder on MNIST handwritten digits. References: Y. LeCun, L. Bottou, Y. Bengio, and P. Haffner. "Gradient-based learning applied to document recognition." Proceeding…