首页 > 其他分享 >李超线段树

李超线段树

时间:2022-10-13 19:33:43浏览次数:43  
标签:rt int mid 线段 李超 pos calc

\(LiChao-Tree\)

简称LCT
维护一些与斜率相关的东西,一次函数等等

\(calc(a,pos):\)用来计算\(y = k_a \times x + b_a\),其中横坐标\(x = pos\)

inline db calc (int x,int pos){return k[x] * (pos - 1) + b[x];}

\(update(rt,L,R,x):\)用\(x\)代表的线段更新最值

void update(int rt,int L,int R,int x){
	if(!t[rt]) return t[rt] = x,void();
	if(calc(x,mid) > calc(t[rt],mid)) swap(t[rt],x);
	//为什么让x线段始终处于下方:因为代码短(逃
	if(calc(x,L) > calc(t[rt],L)) update(lson,L,mid,x);
	if(calc(x,R) > calc(t[rt],R)) update(rson,mid + 1,R,x);
}

\(query(rt,L,R,pos):\)求所有与\(x=pos\)的交点的最大\(y\)值

一定是一路取\(max\)(标记永久化了)

db query(int rt,int L,int R,int pos){
    if(L == R) return calc(t[rt],pos);
    if(pos <= mid) return max(calc(t[rt],pos),query(lson,L,mid,pos));
    else return max(calc(t[rt],pos),query(rson,mid + 1,R,pos));
}

注意

  1. 看看斜率范围,需不需要初始化
  2. 询问或者更新的时候先判断当前是否有覆盖线段

标签:rt,int,mid,线段,李超,pos,calc
From: https://www.cnblogs.com/Facrt/p/16789370.html

相关文章

  • 权值线段树
    一.权值线段树权值线段树即一种线段树,以序列的数值为下标。节点里所统计的值为节点所对应的区间[l,r]中,[l,r]这个值域中所有数的出现次数。举个例子,有一个长度为10......
  • 【luogu CF1396D】Rainbow Rectangles(线段树)
    RainbowRectangles题目链接:luoguCF1396D题目大意给你一个L*L的矩形,里面有n个点,有各自的颜色。然后问你有多少个端点是整点的矩形可以圈出所有颜色至少有一个点。......
  • Codeforces Round #826 (Div. 3) F // 线段树
    题目来源:CodeforcesRound#826(Div.3)F题目链接:F.Multi-ColoredSegments题意给定\(n\)条有颜色的线段(\(l_i,r_i,c_i\)),对于每条线段,求:距离该线段最近,且颜色不同的......
  • 线段树( 进阶 )
    线段树蓝某杯省赛比赛结束后,倒数第二题是线段树,但是我没想到怎么建树。时隔几个月,蓝某杯国赛结束后,这题线段树可以做,但是我没写出来。(这是我一个朋友[doge])简介​ 线......
  • Optimal Partition (线段树优化DP)
    给定一个数组 a,(1≤n≤5×105),你需要将其分割为若干个连续的子数组,使所有子数组的价值总和最大。定义价值是:r-l+1,和>00,和=0-(r−l+1),和<0;思路:首先这道题初......
  • P3842 [TJOI2007]线段
    P3842 每一行走完该行的线段后才能向下一行移动,那么显然可以按行数为阶段进行DP,发现每一行停止的位置不是在左端点就是在右端点,所以设f[i][0\1]表示走完第i行的线段最终......
  • 李超线段树
    李超线段树维护很多个线段/直线,查询和某条$x=k$的直线的交点的纵坐标最大值线段树上每个节点维护的是,在中点$mid$处取最大值的线段,称它为这个区间的优势线段,但......
  • HDU 1698 Just a Hook(线段树)
    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1698思路:updata()区间替换,query()区间求和先上3篇博客1:http://blog.sina.com.cn/s/blog_a2dce6b30101l8bi.html 2:ht......
  • P3919 【模板】可持久化线段树 1(可持久化数组)
    还是用主席树来做(因为提到不同的版本),这时候的主席树不是以权值为下标的,就是普通的线段树,维护范围1~n,i存的是a[]中的数。1#include<bits/stdc++.h>2usingnamespac......
  • 线段树
    线段树线段树是一个很优秀的树结构,较简单,功能多,可以维护复杂信息。可以动态开点,可以打懒标记。基本概念线段树是基于分治思想的二叉树。为了引入线段树,我们来看一个......