随笔分类 - Data Structure --- 线段树
摘要:题面 题解 CF1327F AND Segments + 整体 dp。 首先预处理 \(\mathrm{pre}_i\) 表示向上最深的 \(f(e) = 1\) 的边的深度最小值。 设 \(f_{i, j}\) 表示当前在点 \(i\),最深的 \(f(e) = 1\) 的深度为 \(j\) 的方
阅读全文
摘要:"题面" 题解 树链剖分 + 主席树 先考虑一个简单一点的问题: "【LNOI2014】LCA" 我们考察$dep[\mathrm{LCA}(i, x)]$的性质,发现它是$i$和$x$的链交的长度。 那么对每个$i$所在的链打一个区间加标记,询问时算一下$x$所在的链的区间和即可。 如果有$l \
阅读全文
摘要:"题面" 题解 考察$dep[\mathrm{LCA}(i, x)]$的性质,发现它是$i$和$x$的链交的长度。 那么对每个$i$所在的链打一个区间加标记,询问时算一下$x$所在的链的区间和即可。 如果有$l \leq i \leq r$的限制,就进行离线处理即可。 代码 好久之前的代码,有点丑见
阅读全文
摘要:"题面" 题解 解法一 这个思路要基于以下一个结论: 当你删掉某条边$(x,x+1)$时,最短路路线为:$1\to x(\leq u)\to y( u) \to n$,并且$x\to y$一定不会属于原最短路。 我们枚举删掉最短路上的哪条边,然后把这条边的$s$加进队列做SPFA,这个应该就是部分分
阅读全文
摘要:"题面" 题解 过年的假期里肯定要用硬核数据结构打发时间啊 所以我大胆尝试,用了一种速度不能算最快但是码量绝对是很大的一种方法 ~~居然控制在了6KB以内~~ 线段树套红黑树 ~~(逃~~ 这是一次前所未有的尝试 因为线段树套平衡树求区间第$k$小复杂度是$\mathrm{O}(\log^3n)$的
阅读全文
摘要:"题面" 题解 相信大家写过的传统做法像这样:(这段代码蒯自 "Karry5307的题解" ) cpp struct SegmentTree{ ll l,r,prefix,suffix,sum,maxn; }; //... inline void update(ll node) { ll res;
阅读全文
摘要:题面 天上有$n$朵云,每朵云$i$会在时间$[l_i,r_i]$出现,你有$\text C$个糖果,你可以花费$c_i$个糖果让云$i$消失,同时需要保证你最多让两朵云消失.现在有$m$个独立的询问,每次给你一个需要让阳光照$k$时间的植物,问你从时刻$0$开始,这个植物最快什么时候能长成. $n
阅读全文
摘要:题面 题解 这里提供几种不用脑子的算法(当然是离线的): $\text{LCT}$ 记下每条边的删除时间,用$\text{LCT}$维护最大生成树,每次加进一条边时,跟原来那条链上的做比较,删除那条删除时间最短的边即可。 线段树分治 这个算法将每条边的加入和删除时间加入到线段树中,所以在遍历到叶子节
阅读全文
摘要:"题面" 题解 这题好神仙啊。。。 我们二分这个位置上的数, 然后当$val[i] \geq mid$的位置设为$1$,否则为$0$ 这样一来,这道题就变成了一个$01$序列排序,所以就可以用线段树实现$log_2n$排序(区间和以及区间覆盖) 由于这个数列是$1 n$的全排列,所以二分出的结果就是
阅读全文
摘要:"题面" 题解 线段树合并 我们看到这道题目首先可以想到树上差分,然后$dfs$合并 发现题目让我们求的东西很好用线段树维护 于是可以想到线段树合并 ~~全世界只有我写指针版动态开点线段树(大雾~~ 如果你要写指针版,请开内存池,~~new又耗时又浪费空间~~ 代码 cpp include incl
阅读全文
摘要:"题面" 题解 整体二分 区间查询可以二分,把所有的询问放在一起,用线段树区间查询即可。 代码 cpp include define RG register using namespace std; inline int read() { int data=0, w=1; char ch=getch
阅读全文