李超树(无脑秒斜率)

2024-01-05 02:50
文章标签 斜率 无脑 李超树

本文主要是介绍李超树(无脑秒斜率),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一.What?
  • 二.How?
    • 1.插入(update)
    • 2.查询(query)
  • 三.板题( [[JSOI2008]Blue Mary开公司](https://www.luogu.com.cn/problem/P4254))
  • 五.高端操作
    • 1.动态开点
    • 2.合并(merge)
  • 四.ZZH的旅行
  • Thanks!

一.What?

李超树个人认为用处有点大,因为会了李超树,就再也不怕斜率优化做不出来了,你但凡能够推出一个一次函数的式子那铁定用李超树。所以撒子是李超树呀?就是变异的线段树,即在某个区间内维护区间中点值最大的一条线段,然后查询就是问某个点的最大值,直接一一映射到区间中就行了。所以插入 O ( log ⁡ n 2 ) O(\log n^2) O(logn2)(常数巨小),查询 O ( log ⁡ n ) O(\log n) O(logn)

二.How?

这里就口胡口胡。

1.插入(update)

step1:
首先根据我们的定义,每个区间要保留中点值最大的一条线,所以将老线段的中点值跟新线端的中点值比较取大的一个。如果老线段的中点值要小一些就跟新线端swap一下,保证新线端中点值更小。
step2:
考虑下传,有这样两种情况:
①新线端的斜率较小:
在这里插入图片描述
可以看到,mid右面新线段被吊打,然而左边就不一定了,所以要更新左边。
②新线端斜率更大
在这里插入图片描述
可以看到,mid左面新线段被吊打,然而右边就不一定了,所以要更新右边。
Code:

inline void update (int Index, int l, int r, int now){int mid = l + r >> 1;if (w (now, mid) > w (t[Index], mid))swap (now, t[Index]);if (l < r){if (k[t[Index]] > k[now])update (Index * 2, l, mid, now);elseupdate (Index * 2 + 1, mid + 1, r, now);}}

2.查询(query)

显而易见,将当前区间存的线段的答案值跟子区间的答案值比较就行。

inline double query (int Index, int l, int r, int now){if (l == r){return w (t[Index], now);}int mid = l + r >> 1;if (mid >= now){return max (w (t[Index], now), query (Index * 2, l, mid, now));}else{return max (w (t[Index], now), query (Index * 2 + 1, mid + 1, r, now));}}

三.板题( [JSOI2008]Blue Mary开公司)

注意横截距为1,要减哟!

#include <bits/stdc++.h>
using namespace std;#define M 50005
#define N 100005
#define LL long longint q, n;
double k[N], b[N];inline int read (){int x = 0, f = 1; char c = getchar ();while (c < '0' || c > '9') {if (c == '-') f = -1; c = getchar ();}while (c >= '0' && c <= '9') {x = x * 10 + c - 48; c = getchar ();}return f * x;
}
inline double w (int id, int pos){return k[id] * (pos - 1.0) + b[id];
}
struct Segemetree {int t[M * 4];inline void update (int Index, int l, int r, int now){int mid = l + r >> 1;if (w (now, mid) > w (t[Index], mid))swap (now, t[Index]);if (l < r){if (k[t[Index]] > k[now])update (Index * 2, l, mid, now);elseupdate (Index * 2 + 1, mid + 1, r, now);}}inline double query (int Index, int l, int r, int now){if (l == r)

这篇关于李超树(无脑秒斜率)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/571430

相关文章

计算数组的斜率,偏移,R2

模拟Excel中的R2的计算。         public bool fnCheckRear_R2(List<double[]> lRear, int iMinRear, int iMaxRear, ref double dR2)         {             bool bResult = true;             int n = 0;             dou

论斜率优化dp

论斜率优化dp 1问题2暴力算法-线性dp3斜率优化线性dp4后记 1问题 如下图 看到这题,题面很复杂 其实可以转化为如下问题 有 n n n个任务,排成一个有序序列,我们要解决这些任务 总费用是每一个任务的完成时间乘以费用系数求和 每个任务之前需要有一个机器启动时间 s s s 也就是说,一开始的时间为 0 0 0,做每个任务之前要先费 s s s的时间启动机器,做每个

斜率优化dp结论

斜率优化dp 一切的前提为:k<j<i,假设从j转移到i比从k转移到i更优(即靠后的j优),去按照题目推导不等式,如果得到g(k,j)<f(i),因为想在决策i的时候f(i)其实为常量,我们设为C=f(i),则将前述不等式表述一般化:定理:对于下标k<j,如果g(k,j)<C,则靠后的j更优;否则,g(k,j)>C,靠前的k更优。 结论:如果g(i,j)<C,最后求最优解时维护下凸包。 证明:设由

【线性相关 vs 双变量回归】数据点在斜率周围的聚集程度与斜率本身并不是一回事。

相关性分析(具体来说,皮尔逊成对相关性)和回归分析(具体来说,双变量最小二乘 (OLS) 回归)具有许多共同的特征: 两者都定期应用于两个连续变量(我们称之为 X 和 Y)。通常向学生介绍这两种图表时使用的是同一类型的图表:散点图。二者从根本上讲都是关于 X 中的偏差(即相对于平均值的单个值)与 Y 中的偏差之间的关系。两者都假设 X 和 Y 之间存在线性关系。两者都可以用于经典的假设检验,每个

[SCU 4516] Mingo's Game (斜率DP)

SCU - 4516 有 N个关卡,可以分为 K块,每个关卡都有个权值 ti t_i 每次选择最早没有通关的关卡块,设这个关卡包含了 [i,j] [i,j]的游戏 选到最早没有通关的关卡是k, 选到 k的概率是 P=tk∑jx=ix P =\frac {t_k} {\sum_{x=i}^j x} 选到一个关卡一定能通关,花费一小时 求合理分块的情况下,通关所有关卡块的期望时间最小

关于斜率大于1的中点画线的公式推导

首先还是假设直线L的一般公式为:Ax+By+C=0,并且斜率大于1,那么这个时候代表x变化慢,y变化快,那么这时我们应该让y每次递增1,x是否递增,需要判断,判断方法如下: 首先假设直线的起点(x1,y1),终点为(x2,y2),那么从起点开始,起点的下一个点的坐标应该是(x_next,y_next),因为y每次递增1,所以y_next = y1+1,那么x_next应该取哪个点呢? 设起点的

斜率优化详解

斜率优化 [HNOI2008] 玩具装箱 状态转移方程: f i = m i n ( f i , f j + ( s u m i + i − s u m j − j − L ) 2 ) i > j f_i=min(f_i,f_j+(sum_i+i-sum_j-j-L)^2){i>j} fi​=min(fi​,fj​+(sumi​+i−sumj​−j−L)2)i>j 设A为 s u m i

无脑歧视项目外包公司,吹捧自研产品公司,都是不理性的。

经常看到有人在网上说软件开发外包公司的各种不好,还说有外包经历是简历的污点,贝格前端工场作为项目公司(非驻场人力外包),要为我们这种类型外包公司说两句。 一、项目外包是社会分工的必然结果 你想喝牛奶,难道要自己养牛吗,你要吃鸡蛋,需要自己喂鸡吗?显然没有必要! 社会分工就早就替你做了这一切,所以你仅需购买牛奶和鸡蛋即可。 同样一个公司需要开发个软件,难道要自己养个开发团队吗?为什么这么简单

曲线斜率与法向量综合辨析

参考: http://wenku.baidu.com/link?url=AxjATkZdZg4NOER0_7dWz18OdacwtEWFcr5kZgmrBexxmJzS9M5D_fqlBsFIpBNlq1ZuZu6Qd6mg8fgXaayFA7O2IR4PXNseeYy9V_62bWW 用函数表达式与方程表达的变量之间关系是有一点点区别的。 从一元看起。 y=f(x) y = f(x),

炫富神器,简单无脑粘贴复制,闷声发财,当天见收益,无上限封顶

项目主打简单、暴力、易操作、可复制,单人可做、不靠关系走门路、不重投资、可复制放大! 今天给大家带来的这个项目,有点暴力,请先做好心理准备!谨慎观看!! 这个项目原理是利用软件生成炫富视频,满足各类人的炫富需求,具体你是用来交友还是打造人设还是…,咱们这里不去深究,咱们主要是通过各渠道发布出售软件卖卡密获益,我带你看看我是如何做到日入15W的。 课程目录: 1、项目介绍 2、准备工作 3