【洛谷P4254】Blue Mary开公司【李超线段树】

杭电AcmKeHaoWanLe模板1 3.10 线段树合并 . 3.11 树链剖分 3.12 李超线段树 . 3.14 左偏树 . 3.15 带修改区间第 k 小 . 3.16 Segment Be 立即下载

题目大意:

题目链接:https://www.luogu.org/problem/P4254

两个操作:

  • P r o j e c t   s   p Project\ s\ p Project s p:接到一个方案,第一天收入为 s s s,接下来每天收入增加 p p p。
  • Q u e r y   x Query\ x Query x:询问第 x x x天的最大收入是多少(只能选择一个方案)。

思路:

李超线段树。具体讲解看这:Link
李超线段树的一个区间 [ l , r ] [l,r] [l,r]维护的是在区间 [ l , r ] [l,r] [l,r]中,贡献最多的线段。
比如说下图

在这里插入图片描述
红色虚线中间,蓝色段都是可以做成贡献的,但是从总的贡献来说,右边的蓝色段的贡献更大,所以这一段区间记录的就是右边的蓝色段。
然后每次插入一条直线,就分裂讨论:贡献更多,没有贡献,整一条的贡献。标记永久化。
具体看链接内容吧,懒得介绍了。


代码:

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

const int N=100010,M=50000;
int n,m;
double k[N],b[N];
char ch[10];

struct Treenode
{
	int l,r,ans;
};

double pos(int p,int x)
{
	return k[p]*(double)(x-1)+b[p];
}

struct Tree
{
	Treenode tree[M*4];
	
	void build(int x)
	{
		if (tree[x].l==tree[x].r) return;
		int mid=(tree[x].l+tree[x].r)>>1;
		tree[x*2].l=tree[x].l;
		tree[x*2].r=mid;
		tree[x*2+1].l=mid+1;
		tree[x*2+1].r=tree[x].r;
		build(x*2); build(x*2+1);
	}
	
	void update(int x,int p)
	{
		int l=tree[x].l,r=tree[x].r;
		if (pos(p,l)>pos(tree[x].ans,l) && pos(p,r)>pos(tree[x].ans,r))
		{
			tree[x].ans=p;
			return;
		}
		if (pos(p,l)<=pos(tree[x].ans,l) && pos(p,r)<=pos(tree[x].ans,r))
			return;
		int mid=(l+r)>>1;
		if (k[p]>k[tree[x].ans])
		{
			if (pos(p,mid)>pos(tree[x].ans,mid))
				update(x*2,tree[x].ans),tree[x].ans=p;
			else update(x*2+1,p);
		}
		else
		{
			if (pos(p,mid)>pos(tree[x].ans,mid))
				update(x*2+1,tree[x].ans),tree[x].ans=p;
			else update(x*2,p);
		}
	}
	
	double ask(int x,int p)
	{
		if (tree[x].l==tree[x].r) return pos(tree[x].ans,p);
		int mid=(tree[x].l+tree[x].r)>>1;
		if (p<=mid) return max(pos(tree[x].ans,p),ask(x*2,p));	
			else return max(pos(tree[x].ans,p),ask(x*2+1,p));
	}
}Tree;

int main()
{
	scanf("%d",&m);
	Tree.tree[1].l=1; Tree.tree[1].r=M;
	Tree.build(1);
	while (m--)
	{
		scanf("%s",ch+1);
		if (ch[1]=='P')
		{
			n++;
			scanf("%lf%lf",&b[n],&k[n]);
			Tree.update(1,n);
		}
		else
		{
			int x;
			scanf("%d",&x);
			printf("%d\n",(int)Tree.ask(1,x)/100);
		}
	}
	return 0;
}
数据结构与算法 —— 最短路径Dijkstra算法(迪杰斯特拉)详细图解以及python实现 前两章我们讲到了关于图的基本知识,和广度/深度优先搜索。本章,我们将介绍加权图和最短路径的相关知识。最短路径和最小生成树是图论中常见的问题。最短路径是指在一个图中找到两个节点之间的最短路径,最小生成树是指在一个图中找到一个连通子图,使得所有节点都能够互相到达,且总权值最小。最短路径算法常见的有floyd算法(弗洛伊德算法)和 dijkstra算法(迪杰斯特拉)。本文只介绍dijkstra算法。最短路径运用非常广泛,比如在导航系统中,确定两个地点间哪条路线最短; 阅读详情

相关推荐

MATLAB不能识别已安装的visual studio 2015解决方法

首先,对于MATLAB识别已经安装的vs版本通过命令: mex -setup 下图为本电脑下同时安装的两个visual studio 如果搞清楚MATLAB识别电脑上安装vs的过程,可通过命令: mex -setup -v MATLAB输出识别编译器的整个过程。其中HKLM和HKCU分别是注册表中的HKEY_CURRENT_USER,HKEY_LOCAL_MA…的缩写,MATLAB没有找到对应编译器是由于注册表里没有对应信息(主要是文件路径,C++编译器的路径),或者在注册表里存在该信息,但是找不到

qq_36320710的博客 4895

李超线段树

什么是李超线段树 先以一个问题引入: 在平面上有两种操作(强制在线): 插入一条表达式为 L : y = k*x+b 的直线,给出 k ,b 。 给出 t,求当前所有直线中与直线 x = t 交点的纵坐标最大是多少 直线取 max 应该是得到一个下凸包,像这样(黑色的): 李超线段树是什么?线段树,当然是要维护区间 [L , R] 的一个信息,李超线段树维护的就是中点处最高的直线 比如下图,区间 [ 0 , 4 ] 的中点 x = 2 的最高直线为红色直线 利用这一信息,可以在 O(log n )

weach的博客 4721

【论文速读】MLDT:基于开源大语言模型的复杂长时机器人任务规划多层次分解方法

—在数据驱动的人工智能技术领域,开源大语言模型(LLMs)在机器人任务规划中的应用是一个重要的里程碑。近期基于开源大语言模型的机器人任务规划方法通常利用大量的任务规划数据集来提升模型的规划能力。虽然这些方法展现出了一定的前景,但它们在处理复杂长时任务时存在困难,因为这类任务需要理解更多的上下文信息并生成更长的动作序列。本文提出多层次分解任务规划方法(MLDT)来解决这一局限性。该方法创新性地在目标级、任务级和动作级对任务进行分解,以应对复杂长时任务带来的挑战。

muyulingfengye的博客 1644

【数据结构】李超线段树

我们用这条线段递归更新对应子树,用另一条线段作为懒标记更新整个区间,这就保证了递归下传的复杂度。不合法的点对就是原来的路径不经过环的,因为它们想走第二条路径就会经过环一次,会有点重复走。其中肯定有一个子区间被左区间或右区间完全包含,也就是说,在两条线段中,肯定有一条线段,只可能成为左区间的答案,或者只可能成为右区间的答案。如图,加入黄色线段后,只有红色节点的标记被更新,而绿色节点的标记还未被改变。这里我的写法是给李超线段树上的每个节点打个时间标记,记录它的线段是哪个时间段的,这样不用考虑删除的问题。

conti123的博客 1606

Ubuntu 22.04 安装 IsaacLab 2.1.0

本文介绍了IsaacLab的完整安装流程:1)创建Python3.10虚拟环境;2)安装PyTorch2.5.1(CUDA11.8);3)升级pip并安装IsaacSim4.5.0;4)克隆IsaacLab仓库;5)运行安装脚本(需接受EULA)。若遇cmake缺失错误,需执行sudo apt安装。安装完成后可通过Ant-v0训练任务验证,成功运行后将显示IsaacSim窗口和训练完成提示。注意:IsaacSim不同版本可共存于不同环境。

weixin_47880303的博客 2223

LabVIew串口收发的一些问题

LabView串口收发实验总结

weixin_45508826的博客 2065

李超线段树(Li-Chao Segment Tree)

李超线段树 李超线段树是一种用于维护平面直角坐标系内线段关系的数据结构。它常被用来处理这样一种形式的问题:给定一个平面直角坐标系,支持动态插入一条线段,询问从某一个位置 (X,+∞)(X,+\infty)(X,+∞) 向下看能看到的最高的一条线段(也就是给一条竖线,问这条竖线与所有线段的最高的交点 如上图,有三条线段,两条红色竖线代表两个询问,则点 AAA 与点 BBB 就是询问到的答案。 李超线段树的核心是维护每个区间的“最优势线段”,即在每个区间的中点处最高的线段。询问时我们可以对所有包含横坐标为

weixin_45630722的博客 1107

SpringBoot+VUE3实战:如何用WebSocket搞定网页端语音通话(避坑指南)

本文详细介绍了如何使用SpringBoot和VUE3结合WebSocket技术实现网页端语音通话功能。从环境配置、WebSocket服务端实现到前端音频处理,提供了完整的开发指南和避坑建议,帮助开发者快速构建稳定高效的实时语音通信系统。

weixin_29021195的博客 221

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

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

zhangmohan123321的博客 1137

信息收集-服务器信息

服务器上面可以运行大量的系统服务和第三方应用服务,如果操作系统或者第三方软件没有及时升级打补丁,攻击者就有可能直接通过服务器上运行的服务进行攻击。

weixin_49349476的博客 1446

【数据集5】土地利用类型数量预测数据LUH2

简介土地利用类型数量预测数据LUH2

WW、forever的博客 4546

『李超线段树』洛谷P4254 [JSOI2008]Blue Mary开公司

『题意描述』 Blue Mary 最近在筹备开一家自己的网络公司。由于他缺乏经济头脑,所以先后聘请了若干个金融顾问为他设计经营方案。 万事开头难,经营公司更是如此。开始的收益往往是很低的,不过随着时间的增长会慢慢变好。也就是说,对于一个金融顾问i,他设计的经营方案中,每天的收益都比前一天高,并且均增长一个相同的量P_i。 由于金融顾问的工作效率不高,所以在特定的时间,Blue Mary ...

Miserable_ccf的博客 396

实战!用Python爬取海关总署进出口贸易数据 —— 从反爬突破到数据可视化全流程指南

{"period": "2026-05", "country": "美国", "import_val": 123.4, "export_val": 567.8, ...}研究员可构建领先指标模型;fig = px.bar(top, x="country", y="total_usd", title="贸易总额TOP10")html.H1("海关进出口数据看板", style={"textAlign": "center"}),"""发起带签名的POST请求(实际为GET + query param)"""

2201_76125261的博客 588

专题·李超线段树【including 李超线段树,洛谷P4254 Blue Mary开公司

李超线段树,洛谷P4254 Blue Mary开公司

樱狸✨愿携清风归来处 331

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

洛谷P4254 [JSOI2008]Blue Mary开公司(李超线段树)

题面 传送门 题解 李超线段树板子 具体可以看这里 //minamoto #include<bits/stdc++.h> #define R register #define fp(i,a,b) for(R int i=(a),I=(b)+1;i<I;++i) #define fd(i,a,b) for(R int i=(a),I=(b)-1;i>I;--i) #defin...

weixin_30507269的博客 102

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【洛谷 P4254】 [JSOI2008]Blue Mary开公司(李超线段树)

题目链接 其实这东西很好懂的。。用来维护一次函数。 每个结点存一个值,表示x=这个区间的mid时值最大的函数的编号。 把插入线段的斜率和当前结点的斜率和大小比较来更新左右儿子的值。 查询是实际上是查询从根到这个叶节点链上的最大值。。 #include <cstdio> #include <iostream> using namespace std; const int MA...

weixin_34050427的博客 175

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

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

P4254 [JSOI2008]Blue Mary开公司(李超线段树模板)

洛谷链接 题目大意就是 q 个询问,每次插入一条直线,或询问 横坐标 xxx 处最高点的 yyy 值是多少。 李超线段树模板题,李超线段树用来维护二维平面的直线(线段),线段树上每一个节点维护覆盖这个区间的最优势线段(即在 midmidmid 处取值最大的线段),类似于线段树分治,每条线段在线段树上拆分成 logloglog 段,更新不会用 pushdown 下推标记(原来这个东西叫标记永久化),...

qq_41997978的博客 246

洛谷P4254 [JSOI2008]Blue Mary开公司

https://www.luogu.com.cn/problem/P4254 李超线段树板题,注意最后要跟0比较一下大小,因为可以选择不做亏本生意 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int maxl=1e5+10; int n,m=5e4,tot; struct node { int l,r,id; }tr[maxl<<2]; char s[maxl]; str

binarycopycode 236

[JSOI2008]Blue Mary开公司(李超线段树)

题目描述: 有两个操作 Project b k 表示 第一天有 b 的收益 以后每天增加 k 的收益 Query x 表示 查询 第 x 天的最大收益是多少 题目分析: 对于每个计划 第X天的收益可以表示为 P(i)=k*(i-1)+b 形式为一个一次函数 题目可表示为维护每个点上覆盖本点1次函数的最大值是多少 如何维护一条线段上的一次函数? 用超哥线段树啊(雾 题...

HT008的Blog 284

洛谷 P4254 [JSOI2008]Blue Mary开公司 线段树

题目背景 Blue Mary 最近在筹备开一家自己的网络公司。由于他缺乏经济头脑,所以先后聘请了若干个金融顾问为他设计经营方案。 题目描述 万事开头难,经营公司更是如此。开始的收益往往是很低的,不过随着时间的增长会慢慢变好。也就是说,对于一个金融顾问 iii,他设计的经营方案中,每天的收益都比前一天高,并且均增长一个相同的量 PiPiP_i 。 由于金融顾问的工作效率不高,所以在特定的时间...

liangzihao1的博客 265

BZOJ1568: [JSOI2008]Blue Mary开公司(洛谷P4254)

线段树 BZOJ题目传送门 洛谷题目传送门 这是一个叫李超线段树的东西。 这道题可以抽象成一个平面直角坐标系,有两种操作:加入一条直线或询问当x=tx=tx=t时所有直线的最大值(ttt为整数)。 对于每个区间记录一条直线kxk_xkx​和bxb_xbx​,在这个区间中这条直线取到的长度最长。 当插入一条直线时,对于一个区间分三种情况讨论: 1.没有最长直线或当前直线完全覆盖最长直线。此时直接把当...

forezxl的博客 248

数据结构专题-学习笔记:李超线段树

李超线段树的学习笔记。

Plozia 的小窝 787
上一篇: 【洛谷P2267】琪琪的项链【dp】
下一篇: 随机跳题挑战总结 Part5
stoorz1023
博客等级 码龄9年 101粉丝 595原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值