李超线段树维护斜率dp:P4655

https://www.luogu.com.cn/problem/P4655

这东西长得就很像斜率优化的东西,但是不能用朴素斜率优化,因为横坐标不满足递增。

但我们可以直接用李超线段树维护即可。

#include<bits/stdc++.h>
using namespace std;
#ifdef LOCAL#define debug(...) fprintf(stdout, ##__VA_ARGS__)
#else#define debug(...) void(0)
#endif
#define int long long
inline int read(){int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;
ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<1)+
(x<<3)+(ch^48);ch=getchar();}return x*f;}
#define Z(x) (x)*(x)
#define pb push_back
#define fi first
#define se second
//#define M
//#define mo
#define N 1000010
int n, m, i, j, k, T;
int h[N], c[N], s[N], f[N], rt; struct Lichao_tree {int tot, ls[N<<2], rs[N<<2]; pair<int, int>e[N<<2]; void build(int &k, int l, int r) {if(!k) k=++tot, e[k]={0, 1e17}; if(l==r) return ;int mid=(l+r)>>1; build(ls[k], l, mid); build(rs[k], mid+1, r); }int calc(pair<int, int>p, int x) {return x * p.fi + p.se; }void add(int k, int l, int r, pair<int, int>p) {if(l==r) return e[k]=p, /*debug("y= %dx + %d\n", p.fi, p.se), */void(); int mid=(l+r)>>1, s1, t1, sl, tl, sr, tr; s1=calc(e[k], mid); t1=calc(p, mid);debug("[%lld %lld][%lld %lld]\n", e[k].fi, e[k].se, p.fi, p.se); if(t1 < s1) swap(e[k], p); //, debug("swap Success !(%d %d) newp : [%d %d]\n", t1, s1, p.fi, p.se); sl=calc(e[k], l); tl=calc(p, l);sr=calc(e[k], r); tr=calc(p, r);if(tl < sl) add(ls[k], l, mid, p); if(tr < sr) add(rs[k], mid+1, r, p); }int que(int k, int l, int r, int x) {if(l==r) return calc(e[k], x); int mid=(l+r)>>1, ans=calc(e[k], x); 
//		debug("%lld = %lld * %lld + %lld\n", ans, e[k].fi, x, e[k].se); if(x<=mid) ans=min(ans, que(ls[k], l, mid, x)); else ans=min(ans, que(rs[k], mid+1, r, x)); return ans; }
}Seg;signed main()
{#ifdef LOCALfreopen("in.txt", "r", stdin);freopen("out.txt", "w", stdout);#endif
//	srand(time(NULL));
//	T=read();
//	while(T--) {
//
//	}n=read(); for(i=1; i<=n; ++i) h[i]=read(); for(i=1; i<=n; ++i) k=read(), s[i]=s[i-1]+k; for(i=1; i<=n; ++i) c[i]=Z(h[i])+s[i-1]; for(i=1; i<=n; ++i) debug("%lld ", c[i]); debug("\n"); Seg.build(rt, 1, 1e6); f[1]=0; Seg.add(rt, 1, 1e6, {-2*h[1], f[1]-s[1]+Z(h[1])}); i=1; debug("y = %lldx + %lld\n", -2*h[i], f[i]-s[i]+Z(h[i])); for(i=2; i<=n; ++i) {f[i]=Seg.que(rt, 1, 1e6, h[i])+c[i]; Seg.add(rt, 1, 1e6, {-2*h[i], f[i]-s[i]+Z(h[i])}); debug("y = %lldx + %lld\n", -2*h[i], f[i]-s[i]+Z(h[i])); }for(i=1; i<=n; ++i) debug("%lld ", f[i]); debug("\n"); printf("%lld", f[n]); return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/229428.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【动态规划精选题目】2、路径问题模型

此动态规划系列主要讲解大约10个系列【后续持续更新】 本篇讲解路径问题模型中的6道经典题&#xff0c;会在讲解题目同时给出AC代码 目录 1、不同路径 2、不同路径2 3、珠宝的最大价值 4、下降路径最小和 5、最小路径和 6、地下城游戏 1、不同路径 class Solution { publi…

基于VGG-16+Android+Python的智能车辆驾驶行为分析—深度学习算法应用(含全部工程源码)+数据集+模型(一)

目录 前言总体设计系统整体结构图系统流程图 运行环境Python环境TensorFlow 环境Pycharm 环境Android环境 相关其它博客工程源代码下载其它资料下载 前言 本项目采用VGG-16网络模型&#xff0c;使用Kaggle开源数据集&#xff0c;旨在提取图片中的用户特征&#xff0c;最终在移…

数据分析-14-基于Python的信用评分卡数据分析(包含代码数据)

文章目录 0. 数据代码下载1. 分析思路2. 理解数据3. 数据清洗3.1 选择子集3.2 列名重命名3.3 缺失数据处理3.4 异常值处理 4. 建立模型4.1 借款逾期超过90天的人数&#xff0c;即借款客户的整体质量情况&#xff1f;4.2 借款人月收入分布情况及月收入对违约客户数量的影响&…

低代码在制造业的应用前景

引言 数字化转型已经成为制造业的必然趋势&#xff0c;为了应对市场的快速变化、提高效率、降低成本&#xff0c;制造业企业不得不追求更智能、更敏捷的生产方式。在这一转型过程中&#xff0c;低代码技术崭露头角&#xff0c;成为了一种强大的工具&#xff0c;有望加速制造业…

PyCharm community 安装教程

目录 链接cudatoolkit 下载地址&#xff1a;https://www.jetbrains.com/pycharm/download/other.html 双击打开 安装路径&#xff0c;可自行更换到D盘 不导入设置 链接cudatoolkit

设计模式(2)--对象创建(5)--单件

1. 意图 保证一个类仅有一个实例&#xff0c;并提供一个访问它的全局访问点。 2. 一种角色 单件(Singleton) 3. 优点 3.1 对唯一实例的受控访问 3.2 缩小名空间(对全局变量的改进) 3.3 允许对操作和表示精化(可以有子类) 3.4 允许可变数目的实例 3.5 比类操作更灵活 4. 缺点…

轻松学会使用 SCP 命令在 Linux 中传输文件

前言 在 Linux 系统中&#xff0c;如果你想要轻松地将文件或目录从一个地方传输到另一个地方&#xff0c;scp 命令是你的好帮手。它让文件传输变得简单快捷&#xff0c;就像拷贝和粘贴一样容易。 什么是 SCP&#xff1f; SCP&#xff08;Secure Copy Protocol&#xff09;是…

RFC4861 中文版下

10. 协议常量 路由器常量: MAX_INITIAL_RTR_ADVERT_INTERVAL 16 秒MAX_INITIAL_RTR_ADVERTISEMENTS 3 次发送MAX_FINAL_RTR_ADVERTISEMENTS 3 次发送MIN_DELAY_BETWEEN_RAS 3 秒MAX_RA_DELAY_TIME .5 秒主机常量: MAX_RTR_SOLICITATION_…

python c++ summary pdb gdb frame registers 调试器,栈帧,寄存器的查看

pdb import pdbpdb.set_trace() # 设置追踪断点 命令说明p a打印aq退出n下一行s执行下一行&#xff08;能够进入函数体&#xff09;r执行下一行&#xff08;在函数中时会直接执行到函数返回处&#xff09;w打印堆栈信息unt N执行到第N行disasdisplay assembler code 打印所有…

c++程序设计编写一个程序,输入N个学生数据,包括学号、姓名、成绩,要求输出这些学生数据并计算平均分

编写一个程序&#xff0c;输入N个学生数据&#xff0c;包括学号、姓名、成绩&#xff0c;要求输出这些学生数据并计算平均分。要求&#xff1a; &#xff08;1&#xff09;设计一个学生类Stud&#xff0c;除了包括no(学号)、name(姓名)和deg(成绩)数据成员外&#xff0c;有两个…

【C语言】cache和程序访问的局部性对程序性能的影响

文章目录 1&#xff0e;源程序比较其性能影响2&#xff0e;内存分配&#xff08;1&#xff09;静态存储区&#xff08;static&#xff09;&#xff1a;&#xff08;2&#xff09;栈区&#xff08;stack&#xff09;&#xff1a;&#xff08;3&#xff09;堆区&#xff08;heap&…

msvcp140.dll丢失怎样修复?全面分析msvcp140.dll的修复方法

在执行特定程序时&#xff0c;有可能遭遇msvcp140.dll文件遗失的困扰&#xff0c;此时该如何处理呢&#xff1f;此次将为您讲述面临此类问题的有效解决方案&#xff0c;涉及到多种修复方法&#xff0c;其中包括利用DLL修复工具进行操作。您可依据个人需求选择相应的修复方式&am…

Linux:时间显示(函数介绍)

文章目录 1、sleep&#xff1a;延迟函数2、time/localtime3、示例&#xff1a;sleep time localtime4、Linux时间调整 1、sleep&#xff1a;延迟函数 函数原型&#xff1a;unsigned int sleep(unsigned int seconds); 功 能&#xff1a;延时 参 数&#xff1a;seconds:秒&am…

LeetCode100123执行操作使频率分数最大(相关话题:滑动窗口,二分法,前缀和)

题目描述 给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。你可以对数组执行 至多 k 次操作&#xff1a; 从数组中选择一个下标 i &#xff0c;将 nums[i] 增加 或者 减少 1 。最终数组的频率分数定义为数组中众数的 频率 。请你返回你可以得到的 最大 频率分数。 众数…

条款5:了解c++默默编写并调用了哪些函数

如果你不自己声明&#xff0c;编译器会替你声明&#xff08;编译器版本的&#xff09;拷贝构造函数、拷贝赋值运算符和析构函数。此外&#xff0c;如果你没有声明任何构造函数&#xff0c;编译器会为你声明一个默认构造函数。 class Empty{};本质上和写成下面这样是一样的: c…

力扣第13题-罗马数字转整数[简单]

题目描述 罗马数字包含以下七种字符: I&#xff0c; V&#xff0c; X&#xff0c; L&#xff0c;C&#xff0c;D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例…

cpp_03_引用_类型转换_温和强转_面向对象

1 引用的应用 1.1 数据传递--值传递 C语言只要涉及数据传递&#xff08;例如&#xff1a;初始化、赋值、传参、返回值&#xff09;&#xff0c; 都为值传递&#xff08;将数据复制一份给到目标内存&#xff09;。 // value.cpp 值传递&#xff1a;将数据复制一份给别人 #in…

删除远端消息, 重进会话仍然取回已删除的消息

用户调用删除函数, 服务器不会判断 对应的 sentTime 是否存在, 仅仅是使用sentTime 直接进行消息删除, 然后返回操作成功; 用户删除远端消息时, 需要保证sentTime的合法性 - (void)deleteRemoteMessage:(RCConversationType)conversationType targetId:(NSString *)targetId me…

Diva配置——Communication Tests

关联文章:CANoe.Diva生成测试用例 Diva目录 一、CANoe.Diva简介二、Communication Tests配置一、CANoe.Diva简介 CANoe.DiVa 是一种 CANoe 选项,用于对 ECU 中的诊断软件实施进行自动化测试。 可以通过CANdelaStudio制作的CDD或ODX文件,经过Diva配置自动生成测试用例和测试脚…

用XPath爬取Crossin教室的文章列表页信息示例

一、背景&#xff1a; 2023.12.12,经过本人的多日权衡比较&#xff0c;我决定购买了crossin老师的Python服务。主要实现了能够通过其编程教室提供的答疑群平台答疑解惑。基于其答疑服务感觉还是不错的。同时能够逐步扎实Python基础与爬虫等相关的技术。今日用xpath完成了一个爬…