动态开点李超树(例题+板子总结)

李超线段树 李超线段树是巨佬李超发明的一种,又名李超树。代码简短,思想简明,用途广泛。 阅读详情

以ABC289 G - Shopping in AtCoder store题为例

做法1:n条直线插入凸包,构建最优直线的凸包,在凸包上二分/排序后离线处理询问

做法2:动态开点李超树维护n条直线最小值,将答案再取反即为最大值,由于值域1e9,采用动态开点

板子总结

动态开点李超树,维护最小值直线,对于x的求最小值y=kx+b

rt:用于动态开点,当前点的点号

ch[][2]:用于动态开点,与01trie类似

line:直线,李超树内每个节点维护一条最优直线,与普通李超树相同

add(int &id, int L, int R, line now):对x∈[L,R]加入直线now,形如y=kx+b,以(k,b)加入

qry(int id, int L, int R, int wz):询问x∈[L,R]中,x=wz对应的最优直线(最小值)的y值

#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
const int N=2e5+10,inf=1e9;
struct LiChaoTree{
    static const int N = 2e5 + 7, M = N * 30, inf = 1e9;
    struct line {
        ll k, b;
        line (ll kk = 0, ll bb = 0) {
            k = kk, b = bb;
        }
        ll get(ll x) {
            return x * k + b;
        }
    };
    ll inter(line aa, line bb) { // 交点的横坐标
        return (bb.b - aa.b) / (aa.k - bb.k);
    }
    int tot = 0, ch[M][2];
    line seg[M];
    void add(int &id, int L, int R, line now) {
        if(!id) return id = ++tot, seg[id] = now, void();
        int mid = (L + R) >> 1;
        ll La = seg[id].get(L), Ra = seg[id].get(R), Lb = now.get(L), Rb = now.get(R);
        if(La <= Lb && Ra <= Rb) return;
        if(La >= Lb && Ra >= Rb) return seg[id] = now, void();
        ll it = inter(seg[id], now);
        if(La <= Lb) { 
            if(it <= mid) add(ch[id][0], L, mid, seg[id]), seg[id] = now;
            else add(ch[id][1], mid + 1, R, now);
        }
        else {
            if(it <= mid) add(ch[id][0], L, mid, now);
            else add(ch[id][1], mid + 1, R, seg[id]), seg[id] = now;
        }
    }
    ll qry(int id, int L, int R, int wz) {
        if(!id) return (ll)inf * inf;
        int mid = (L + R) >> 1;
        if(wz <= mid) return min(seg[id].get(wz), qry(ch[id][0], L, mid, wz));
        else return min(seg[id].get(wz), qry(ch[id][1], mid + 1, R, wz));   
    }
}lc;
int n, m, a[N], b[N], rt;
int main(){
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;++i){
        scanf("%d",&a[i]);
    }
    sort(a + 1, a + n + 1);
    reverse(a + 1, a + n + 1);
    for(int i=1;i<=n;++i){
        lc.add(rt, 0, inf, {-i, -(ll)a[i] * i});
    }
    for(int i=1;i<=m;++i) {
        scanf("%d",&b[i]);
        printf("%lld ",-lc.qry(rt, 0, inf, b[i]));
    }
    return 0;
} 

【李超树】李超线段树维护凸包(凸壳) (例题:blue mary开公司+线段游戏+ZZH的旅行) 这数据结构的代码麻烦其它数据结构学学,点名LCT 阅读详情

相关推荐

牛客多校训练(第一场)H-Longest Path(点分治+李超树)

题意: &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 一颗有边权的树,对于一条路径(u,v),假设经过的边权为e1,e2,e3,...efe1,e2,e3,...efe_1,e_2,e_3,...e_f,则该路径权值cal(u,v)为(e2−e1)2+(e3−e2)2+...+(ef−ef−1)2(e2−e1)2+(e3−e2)2+...+(ef−ef−1)2(e_...

Roll_Keyboard的博客 747

数据结构-李超树学习小结

数据结构-李超树学习小结前言:正文: 前言: 李超树是由杭州学军中学的国家集训队大佬李超发明的,又称超哥线段树,主要功能是用线段树来维护某一点上对应的最高(最低)的线段(或直线)。在数学上来表述,就是处理在某一区间上许多条一次函数的图像y=ki∗x+by=k_i*x+by=ki​∗x+b,维护某一个xxx的值对应的不同的yyy的最大值(最小值)。 正文: 其实李超树并不复杂,主要依赖于线段树,线段...

ha_ing的博客 3849

【原创理论】Stochastic Coupled Dyadic System (SCDS):一个用于两性关系动力学建模的随机耦合系统框架

基于二人爱情耦合系统动力学、稳定性与最优策略的综合性理论的数值模拟与分析

weixin_44695861的博客 1134

李超树模板 / p4097

李超树是一种维护平面线段的数据结构,可以将一次函数存储至线段树中

m0_54646258的博客 689

浅谈功放PA的VBW

摘要:VBW(视频带宽)反映功放的宽带非线性特性和记忆效应,影响数字预失真(DPD)校正能力。其成因是功放管寄生参数(如Cshunt和Leff)形成低频并联谐振,导致供电臂阻抗增大,引发电压波动和记忆效应。测试方法包括双音IM3/IM5测试(以两侧IM3差≥3dB定义VBW)和魔T测试(通过S21曲线测量谐振频率)。改善措施主要是减小Leff,如采用双电源平衡馈电。VBW指标要求通常为魔T测试结果大于3倍信号带宽,以确保功放线性度。

weixin_49761275的博客 1574

基于STM32F334C8T6的四开关Buck-Boost双向DC-DC电源设计与实现(附源码、仿真与计算书)

本文详细介绍了基于STM32F334C8T6的四开关Buck-Boost双向DC-DC电源设计方案。该设计利用STM32的高分辨率定时器(HRTIM)实现精确PWM控制,支持Buck、Boost和Buck-Boost三种工作模式自动切换,具备双向能量流动能力。通过PSIM仿真和Mathcad计算书进行参数优化,实测效率达95.8%,适用于新能源系统和电池管理等场景。

www00的博客 525

AtCoder Beginner Contest 289 G. Shopping in AtCoder store(离线凸包/在线凸包上二分/在线动态开点李超树)

AtCoder Beginner Contest 289 G. Shopping in AtCoder store(离线凸包/在线凸包上二分/在线动态开点李超树)

小衣同学的博客 576

全自动数据分析 - Claude Code Sub-Agents:自动化数据分析工厂

别忘了!claude code也是agent框架,类似langgraph,crewAI,autogen等等agent框架。我改造claude code搞一个数据分析智能体AI。试试看行不行!:让数据分析变得像聊天一样简单!

liangdabiao的博客 1072

李超树——倾斜的线段树

介绍 李超树用以解决一种问题:向平面上插入若干条直线(或线段),查询与直线x=a相交线段的交点坐标y的最大值, 别看这种问题好像挺个别,很多平面题或DP(斜率优化)的题都可以转换成这种问题,而遇到这种问题,李超树比平衡树好打得多。 思想 李超树代码看上去和普通线段树非常像,不同的是,每个节点维护的不是的区间,而是两端x坐标为 l、r 的一条带斜率的线段: (注意,每层的线段高低关系不确定,这样画只是为了好看) 这样查询只需像线段树那样查就是了, 然后怎么插入线段呢?(直线就是 -inf 到 i

偶耶的博客 478

手把手调试Android 14 ShellTransitions:用Log追踪ActiveTransition与Handler匹配过程

本文详细介绍了在Android 14中调试ShellTransitions机制的方法,重点通过Log追踪ActiveTransition与Handler的匹配过程。文章提供了关键日志点植入策略、Handler匹配机制解析及实战调试案例,帮助开发者解决窗口转场动画中的卡顿和错乱问题,提升系统动画性能。

weixin_42652674的博客 429

WPF实战项目十七(客户端):数据等待加载弹框动画

1、在Common文件夹下新建文件夹Events,新建扩展类UpdateLoadingEvent。2、新建一个静态扩展类DialogExtensions来编写注册和推送等待消息弹框方法。3、在ViewModel中添加实现类NavigationViewModel。5、在View文件夹下新建用户控件ProgressView.xmal。4、在主窗体MainView.xmal中给弹窗界面命名。6、在MainView.xmal.cs中注册消息。

yigu4011的博客 2346

csacademy Squared Ends 题解(动态凸包/李超树/分治/二进制技巧)

csacademy Squared Ends 题解(动态凸包/李超树/分治/二进制技巧) 题目链接 首先这是一个比较明显的dp题: dpi,jdp_{i,j}dpi,j​表示前i个分成j段的最优解。 dpi,j=min⁡(dpk,j+(ak+1−ai)2)=min⁡(dpk,j+ak+12−2×ak+1×ai)+ai2 dp_{i,j}=\min(dp_{k,j}+(a_{k+1}-a_i)^2)=\min (dp_{k,j}+a_{k+1}^2-2\times a_{k+1}\times a_i)+a_i

qq_42925924的博客 285

腾讯开源SuperSonic:AI+BI如何重塑数据分析?

SuperSonic是腾讯开源的AI+BI平台,融合Chat BI与Headless BI,为制造企业提供实时数据分析。它通过自然语言交互打破数据壁垒,实现生产、库存、质量、供应链等多环节优化,提升决策效率,其开源生态与扩展性助力企业数字化转型与数据价值挖掘。

数据与算法架构提升之路专栏 4539

[多校 NOIP 联合模拟 11.30 T4] ZZH 的旅行(李超树合并) | 错题本

文章目录题目分析代码 题目 给一棵第 iii 条边边权为 did_idi​ 的有根树,111 为根。对于每个点 xxx,对于满足如下条件的序列 {s1,⋯ ,sk}\{s_1,\cdots,s_k\}{s1​,⋯,sk​}: si−1s_i - 1si​−1 是 sis_isi​ 的祖先,且 si−1≠sis_{i - 1} \neq s_isi−1​​=si​。 s1=xs_1 = xs1​=x 中。 求 ∑i=2k(asi−1−dist(si−1,si))bsi\sum_{i = 2}^k (a_

ixRic 760

华为OD机试 - 文件存储系统的排序 - 深度优先搜索dfs(Java 双机位C卷 200分)

华为OD机试 双机位C卷题库疯狂收录中,刷题。

学Java,找哪吒 719

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Codeforces Round #189 (Div. 1) C. Kalila and Dimna in the Logging Industry(李超树)

题目链接:http://codeforces.com/problemset/problem/319/C   挺简单的,记一个李超树的板子   代码: #include&lt;bits/stdc++.h&gt; #define xx first #define yy second #define mp make_pair #define pb push_back using namesp...

bibibibi的博客 279

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

C++竞赛常用实用代码(4)

拓扑排序判环 树链剖分 非旋treap模板 有理数(分数防卡精)结构体 求树的重心 Prim求最小生成树(多用于完全图) 李超树板子(动态开点) 线段树合并 快速沃尔什变换 KMP板子 EXKMP板子 Manacher板子 AC自动机板子 后缀数组sa+height 后缀自动机 回文自动机

偶耶的博客 1308

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

20200905省选组总结

T3板子爆零QwQ T1:一眼圆方树上DP,嗯……不会圆方树。于是用找树的直径的方法水了60分 正解就是圆方树上DP,学学圆方树就好了 T2:想了半天结果发现写成了单调的。。。交的暴力然而只有5分??? 正解求出左边第一个比i大和右边第一个比i小,按R排序然后两个指针搞一搞,把Rj<i的j无效化,线段树维护一下答案。反着的同理,离线统计答案。 T3:李超树板子题(然鹅我打错了模数错失100。。。) ...

qq_45202550的博客 121

11.25 校内模拟赛总结

难评。

qq_56326461的博客 853

算法竞赛模板

退役了,把之前使用的板子分享一下,没办法一下发全部,想看完整的可以去博客园,docx版本(已排版)网盘链接:https://pan.baidu.com/s/15C0G5CY2aqQykuc5sHz_RQ?pwd=jfur并查集用父指针维护若干不交集,按秩合并与路径压缩可以在近乎常数的均摊时间内完成合并与查询。find 返回代表元并在回溯过程中压缩路径,unite 将两个集合的小树挂到大树以减少高度。赛时常配合排序或扫描线解决连通性判定与合并类问题。**题目:**给定 n 个点与 q 次操作,操作分为两种,合

Lazy_ChessPlayer的博客 967

李超树(无脑秒斜率)

文章目录一.What?二.How?1.插入(update)2.查询(query)三.板题( [\[JSOI2008\]Blue Mary开公司](https://www.luogu.com.cn/problem/P4254))五.高端操作1.动态开点2.合并(merge)四.ZZH的旅行Thanks! 一.What? 李超树个人认为用处有点大,因为会了李超树,就再也不怕斜率优化做不出来了,你但凡能够推出一个一次函数的式子那铁定用李超树。所以撒子是李超树呀?就是变异的线段树,即在某个区间内维护区间中点值最大的

weixin_43908980的博客 1431

线段树之李超树

Brief 李超树是一种线段树的应用,主要应用场合为:单点集合域,区间等差插入,求单点最值。 For Example - 动态地插入多条二维线段,询问某个xxx对应的yyy值的最值。 - 修改[L,R,b,k][L,R,b,k][L,R,b,k],对于第i∈[L,R]i\in[L,R]i∈[L,R]个集合,插入b+(i−L)kb+(i-L)kb+(i−L)k,询问某个集合的最大值。 Proce...

QAQ 780

Composer包超时控制终极指南:请求超时和连接管理详解

Composer作为PHP生态中不可或缺的依赖管理工具,在处理包下载和安装过程中经常会遇到网络连接超时的问题。本文将深入探讨Composer的超时控制机制,帮助开发者解决常见的网络连接问题,提高包管理效率。✨ ## 为什么需要超时控制? 在网络环境不稳定或服务器响应缓慢的情况下,Composer可能会因为默认的超时设置而失败。了解超时控制机制可以帮助您: - 避免因网络问题导致安装中断 -

gitblog_00920的博客 434

【模板】李超线段树 / [HEOI2013] Segment

李超线段树是一种用于维护平面直角坐标系内线段关系的数据结构,插入直线/线段,支持查询单点极值 李超树的经典应用是斜率优化,可以看下这篇文章 李超线段树没有用懒标记实现区间修改,而用的是标记永久化 其实标记永久化与我们对lazy标记的理解非常相同,可以看看LYD蓝书上对标记永久化的解释,都是累积某个节点到根节点路径上的所有点的影响 具体来说,我们用\(s[p]\)表示线段树上\(p\)节点存储线段...

dingxingdi的博客 967

【树形数据结构】李超线段树 (Li-Chao Tree)

李超线段树通过在每个区间维护中点最优线段,支持高效动态插入线段与单点最值查询,结合离散化可处理大坐标范围,常用于斜率优化等场景。

zhangmohan123321的博客 1137
上一篇: 计算几何(板子整理)
下一篇: Codeforces Round #852 (Div. 2) F. Rebrending(树状数组+动态开点线段树)
小衣同学
博客等级 码龄9年 1444粉丝 995原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小衣同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值