首页 > 其他分享 >李超树

李超树

时间:2024-02-10 13:22:41浏览次数:21  
标签:直线 log 线段 我们 插入 复杂度 李超树

李超树

(不得不抱怨一下我现在正在用的这个键盘,好难打,如果有啥子笔误请指出)

基础

支持在线插入一条线段,一条直线,插入线段的极限时间复杂度是\(O(log^2)\),插入一条直线的时间复杂度是\(O(log)\) 的。

支持查询一个已知 \(x\) 的竖线与插入的直线段的交点的最值。

实现

与普通线段树不同,我们的信息现在分散地保存在每一个节点上,而不是仅仅集中于叶节点。

类似标记永久化,每一条根到叶子的路径都保存了潜在的具有优势的线段(直线)。

当更新时,我们将原线段与新线段进行比较,将在区间中点(整数中点)处较高的保留,称其为优势线段,另外一条线段被称为劣势线段。

然后我们将劣势线段下放到其相对于优势线段更有优势的区间——即劣势线段的优势区间。

这样不仅保证了复杂度(一条线段覆盖的区间最多被分作\(log_2{len}\)份,而每份又只会被下放\(log_2{n}\)层,所以关于线段下放的时间复杂度是双\(log\)的),还保证了正确性(显然,你将劣势线段下放到期可能成为优势线段的优势区间这个行为就保证了下放不会遗漏)。

总而言之,实现起来还是很好写的,唯一要注意的就是精度的问题。

运用

如果仅仅是插入直线,那李超线段树的运用也太狭隘了。

我们发现,有的问题中,我们可以把我们的式子(\(DP\)式或者别的什么)写作一个很类似直线表达式的东西,这个东西就可以用李超线段树维护。

举个例子:\(F_i=\min_{j=1}^{i-1}{a*F_j*i+b*j*S_i}\)(里面的变量名乱取的,反正你记住跟\(i\)有关的是常量就对了)。我们可以发现,如果我们将\(j\)看作自变量的话,\(Fi\)就是因变量,而什么\(a\)啊\(F_j\)啊之类的就是常量了。你看,是不是就成了一个直线表达式啊。

那么我们就可以用李超线段树维护了。

小Trick

像上面那种情况,有两个自变量,这该怎么办呢?

如果我们发现他没有常数(就是比如\(a*x+b\)中的那个\(b\)),那么我们不妨无中生\(b\),让他整体除以一个\(i\),变成这样:

\[$F_i=\min_{j=1}^{i-1}({a*F_j*\frac{i}{i}+b*j*\frac{S_i}{i}})*i \]

于是我们就可以把\(\dfrac{S_i}{i}\)看作自变量,然后套模板了。

标签:直线,log,线段,我们,插入,复杂度,李超树
From: https://www.cnblogs.com/Ariginal/p/18012844

相关文章

  • 李超树
    模板:P4097先考虑插入直线在每个节点存一个\(f_i\)表示一条直线。需要保证\(u\)及其祖先的\(f\)中有在\(u\)区间的中点处取得极值的那条直线。考虑更新。注意到一条直线完整覆盖一个区间时,它不需要下传,因为查询它的儿子时必然经过它本身,也就能统计这条直线的贡献。到......
  • 李超树
    去ZR的时候接触到的,然后来填坑。参考资料:李超树-XYini/bx。李超线段树初步-牛客竞赛浅谈李超线段树及其应用-tommymio应用李超线段树最经典的应用就是维护一个二维平面直角坐标系,支持动态插入线段或者直线,询问与直线\(x=x_0\)相交的已插入线段中交点\(y\)......
  • 李超树
    李超数支持动态插入线段/直线,查询单点极值。算法思想排除不可能成为最优解的,维护在当前区间能成为最优解的线段,即该线段在当前区间的某个取值上有最优解。查询的时间复杂度是\(O(\logn)\)的,修改时通过替换和下放,也能达到\(O(\logn)\)的复杂度,区间修改能达到\(O(\log^2n......
  • luogu P4069 [SDOI2016] 游戏 题解【李超树+树剖】
    目录题目描述解题思路code题目描述P4069[SDOI2016]游戏一棵树,树上有\(n\)个节点,最初每个节点上有\(1\)个数字:\(123456789123456789\)。有两种操作:\(\centerdot\)选择\(s,t\)两个节点,将路径上的每一个点都变多(\(1\)个变\(2\)个)数字:\(a\timesdis+b\),其中\(dis\)表示该节点......
  • 李超树浅谈
    李超树是一个可以多个分段一次函数,并取某个端点上所有一次分段函数的最值。基本李超树需要维护两个操作:在\([l,r]\)加入一条线段。询问在\(k\)处的最值。李超树中,每个节点我们存储的函数编号为在这个节点代表区间中点取得最值的函数编号。插入时,我们首先向线段树一样找......
  • 【题解】[HEOI2013]Segment(李超树)
    [HEOI2013]Segment题目分析:是李超线段树的板子题,在这里就稍微提一嘴李超线段树吧。其实李超线段树就是用来解决插入线段,查询\(x=k\)时纵坐标的最大值的。对于李超线......
  • CDQ 分治,李超树与斜率优化
    P4027,及一类类似问题:给定\(a_i,b_i,x_i,y_i\),对于每个\(i\)求出\(f_i=\max\limits_{j=1}^{i}\{a_ix_j+b_iy_j\}\)先说一下一类经典问题的做法:给定\(n\)个二......
  • 李超树(斜率优化无脑DS)
    如果我们需要一个数据结构来维护多个线段在一个点上的最值,那我们就可以使用李超树来完成这个事情。李超树的每个区间记录的是中点值最大的一条线段。如何做到呢?1、插入s......