键入以搜索…
匹配算法:把输入按空格拆分,单独匹配每一段输入(不区分大小写,仅匹配文章文本内容),输出取或后的结果。
模糊搜索似乎很难搞,目前没有相关打算。
键入以搜索…
匹配算法:把输入按空格拆分,单独匹配每一段输入(不区分大小写,仅匹配文章文本内容),输出取或后的结果。
模糊搜索似乎很难搞,目前没有相关打算。
第一次学树套树时,并没有什么特别的感觉,因为属于我的离线分治,我早已遇见
并非第一次学
之前有人在争论『主席树』是否等价于『可持久化线段树』,其实从当前 OI 环境的语境下我觉得是等价的
给定序列,存在关键字 A 和关键字 B,能够求出 \(([0, A'], [B_1, B_2])\) 这个矩形的信息和(这里的矩形可能是 DAG 状的)
也就是说主席树本身存的是关于 A 的信息前缀和
要求 A 只能来源于先前的 A(即 A 具有单调性),且底层信息的 delta 为 1
需要发现这个条件是相当苛刻的,所以这里的 A 通常以时间 / 版本 / DAG 的形式出现
如果信息具有可减性,对于 \(A_2\) 和其某个祖先 \(A_1\),能够求出 \(([A_1,A_2],[B_1,B_2])\) 这个矩形的信息和。
用 \(n\) 棵线段树维护 B 的偏序关系,用类主席树的方式来排列这些树
发现一次修改需要改一段后缀
这一点我们前面说过了,主席树本身存储的是 A 维的前缀和。
所以直接解决这个问题:维护信息的差分。这样就可以通过询问前缀得到原始信息
这个结构和树状数组是很吻合的,考虑在树状数组的每个点上维护动态开点线段树
这样就可以只用修改 log 个线段树
考虑怎么询问
我最初的想法是,做一个线段树合并,利用 DS 本身的树形结构可以有一个 dsu on tree 的复杂度(即 \(O(nq\log^2 n)\)),但显然这个太糖了
正常的做法是,注意到每个点的权值线段树结构相同,所以在 log 个线段树上同时维护,当作包含长度 log 的数组的结构体即可
同树状数组,要求信息有可减性
但由于外层的 DS 本质上舍弃了主席树 DAG 的结构
导致不能直接简单用于树上问题,而是需要在 DFS 序上作文章
实际上常数很大,超过 \(10^5\) 就不太能跑得动了
https://www.luogu.com.cn/problem/P2617 / https://www.luogu.com.cn/problem/P3332
https://www.luogu.com.cn/problem/P3810
https://www.luogu.com.cn/problem/P4175
维护带修树上简单路径第 \(k\) 大。
https://www.becoder.com.cn/contest/6620/problem/4
给定根为 \(1\) 的树,每个点 \(u\) 上有 \(k_u\) 个价钱为 \(w_u\) 的物品,可以在时间 \(t_u\) 及之后获得
给定 \(Q\) 次询问,从问 \(x\) 出发到根的路径上所有在时刻 \(T\) 可以获得的物品全部拿出来排成一列,拥有 \(K\) 金钱时,按照价值从小到大购买,买到的最后一个物品价值。
\(n\le 10^5\),价钱:\(10^{15}\),时间:\(10^5\),个数:\(10^5\)。