题解:P13523 [KOI 2025 #2] 序列与查询

news/2025/9/26 23:01:43/文章来源:https://www.cnblogs.com/a1a2a3a4a5/p/19114484

题目:

长度相同的子段受 \(x\) 影响相同。

哇好厉害的性质,可以直接把每个长度的最大子段和跑下来,询问 \(X\) 相当于找 \(val_{len}+len×X\) 最大的 \(len\),预处理 \(O(n^2+qn)\),查询优化?

考虑画到坐标轴上,把 \((len,val_{len})\) 看成一个点,画一个 \(y=Xx\) 的直线,发现每个点的答案其实是纵坐标加上横坐标在 \(y=kx\) 的值。

凭借小学数学,敏锐地再画一个 \(y=-Xx\) 的直线,这样每个点的答案是每个点向下到直线的距离,已知直线去选最远的点,这很像凸包,简单思考一下确实是。复杂度 \(O(n^2+q\log n)\)

思考如何优化预处理的过程,序列分治上做肯定简单点,再思考怎么拼接左面的后缀和右面的前缀。

大概长这样:
\(dp_{i+j}=hz_i+qz_j\)
其中:
\(dp_i\)\(i\) 长度的最大子段和。
\(hz_i\)\([mid-i+1,mid]\) 的和。
\(qz_j\)\([mid+1,mid+1+j-1]\) 的和。

闵可夫斯基和优化,把 \(hz\)\(qz\) 的凸包维护出来,然后合并后更新 \(dp\),复杂度 \(O(n\log n+q\log n)\)

#include<bits/stdc++.h>
#define int long long
using namespace std;
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<<3)+(x<<1)+(c^48),c=getchar();return x*f;
}
const int QAQ=1e6+7,inf=1e17+7;
int n,q,a[QAQ],x[QAQ],d[QAQ],cnt,o1,o2,o3;
struct xxx {int x,y;} tb[QAQ],zb[QAQ],yb[QAQ],he[QAQ];
double xie(xxx a,xxx b) {return 1.0*(b.y-a.y)/(b.x-a.x);}
xxx operator +(xxx a,xxx b) {return {a.x+b.x,a.y+b.y};}
xxx operator -(xxx a,xxx b) {return {a.x-b.x,a.y-b.y};}
void chuli(int l,int r)
{if(l==r) return d[1]=max(d[1],a[l]),void();int mid=(l+r)>>1;chuli(l,mid),chuli(mid+1,r);o1=o2=0;int sum=0;for(int i=mid;i>=l;i--){sum+=a[i];xxx nw={mid-i+1,sum};while(o1&&xie(zb[o1-1],zb[o1])<xie(zb[o1-1],nw)) o1--;zb[++o1]=nw;}sum=0;for(int i=mid+1;i<=r;i++){sum+=a[i];xxx nw={i-(mid+1)+1,sum};while(o2&&xie(yb[o2-1],yb[o2])<xie(yb[o2-1],nw)) o2--;yb[++o2]=nw;}if(!o1){for(int i=1;i<=o2;i++) d[yb[i].x]=max(d[yb[i].x],yb[i].y);return ;}if(!o2){for(int i=1;i<=o1;i++) d[zb[i].x]=max(d[zb[i].x],zb[i].y);return ;}o3=0;he[++o3]=zb[1]+yb[1];for(int i=o1;i>1;i--) zb[i]=zb[i]-zb[i-1];for(int i=o2;i>1;i--) yb[i]=yb[i]-yb[i-1];int ccx=2,swl=2;while(ccx<=o1&&swl<=o2){if(atan2(1.0*zb[ccx].y,1.0*zb[ccx].x)>=atan2(1.0*yb[swl].y,1.0*yb[swl].x))he[++o3]=zb[ccx],ccx++;else he[++o3]=yb[swl],swl++;}while(ccx<=o1) he[++o3]=zb[ccx],ccx++;while(swl<=o2) he[++o3]=yb[swl],swl++;for(int i=2;i<=o3;i++) he[i]=he[i]+he[i-1];for(int i=1;i<=o3;i++) d[he[i].x]=max(d[he[i].x],he[i].y);
}
signed main()
{cin>>n>>q;for(int i=1;i<=n;i++) a[i]=read(),d[i]=-inf;chuli(1,n);tb[0]={0,-inf};for(int i=1;i<=n;i++){xxx nw={i,d[i]};while(cnt&&xie(tb[cnt-1],tb[cnt])<xie(tb[cnt-1],nw)) cnt--;tb[++cnt]=nw;}for(int i=1,x;i<=q;i++){x=read();int l=1,r=cnt,mid,da;double k=-x;while(l<r){ mid=(l+r)>>1;if(xie(tb[mid],tb[mid-1])<k) r=mid;else l=mid+1,da=mid;}if(xie(tb[r],tb[r-1])>=k) da=r;printf("%lld\n",tb[da].y+tb[da].x*x);}return 0;
}

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

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

相关文章

德州做名片的网站响应式app下载wordpress主题

我正在设计一个小的网络应用程序/游戏。 哪个更好&#xff1a;MySQL表或json文件&#xff1f; 它们都存储信息。 它们都可以由PHP解析。 优点/缺点是什么&#xff1f;这就是我的意思&#xff1a;username | password-------------------seefour | abc123与{"username"…

2025年9月26日 - 20243867孙堃2405

今天只有一节课,英语提高,丰富了我的词汇量

实用指南:(14)ASP.NET Core2.2 中的日志记录

实用指南:(14)ASP.NET Core2.2 中的日志记录pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &…

HarmonyOS 5 网络编程与材料存储实战:从RESTful API到本地持久化

HarmonyOS 5 网络编程与材料存储实战:从RESTful API到本地持久化pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "…

老系统-新系统的数据迁移

目录一、核心同步策略设计二、常用ETL工具实现方案方案1:使用开源工具Apache NiFi(适合技术团队自主部署)方案2:使用商用工具DataPipeline(适合企业级自动化同步)方案3:轻量方案(Python+SQL脚本,适合简单场景…

pc 移动的网站开发定制家具设计软件app

爬虫分为两种&#xff1a;1.通用爬虫。2.聚焦爬虫。通用爬虫&#xff1a;搜索引擎用的爬虫系统。一.目标&#xff1a;爬取所有网站的网页下载下来&#xff0c;存放到本地服务器里形成备份。二.抓取流程&#xff1a;a.首选选取一部分已有的url,把这些url放到待爬取队列。b.从队列…

威海哪家网站做的好北京 网站设计公司

展开全部掌握以下几点步骤&#xff0c;即可轻松加墨。1、首先&#xff0c;从打印机上取下墨盒&#xff0c;32313133353236313431303231363533e4b893e5b19e31333365646234这里就不好做介绍了&#xff0c;取下墨盒的方法因机而异。将墨盒上的一层贴纸撕掉&#xff0c;并拿出所需材…

C语言中的for循环

有点高看自己了,以为学了点java的for循环就觉得随便写,和C语言还是有点差别的,希望以后能静下心来学习吧 D:/study/C语言 devc/sh4.c

excell中完成矩阵的转置相乘

例如矩阵A=[3 1;2 4;1 2],B=[1 2;2 4;3 1];想用excell计算AB^T,矩阵相乘用mmult函数,矩阵转置transpose,假如数据保存如下:也就是数据A保存在B2:C4中,B保存在C2:D4中,将结果保存在F2:H4中,操作如下: 1、选中F2…

理解 Elasticsearch 中的分块策略 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

世安建设有限网站福州网站设计哪家做的好

上篇给大家从零开始搭建了一个我们的ASP.NET Core CMS系统的开发框架&#xff0c;具体为什么那样设计我也已经在第十篇文章中进行了说明。不过文章发布后很多人都说了这样的分层不是很合理&#xff0c;什么数据库实体应该跟仓储放在一起形成领域对象&#xff0c;什么ViewModel应…

网站建设依循的原则聚通达网站建设

虚拟现实&#xff08;Virtual Reality&#xff0c;简称VR&#xff09;是一种通过计算机技术模拟出的一种全新的人机交互方式。它可以通过专门的设备&#xff08;如头戴式显示器&#xff09;将用户带入一个计算机生成的虚拟环境之中&#xff0c;使用户能够与这个虚拟环境进行交互…

US$44 YH BMW CAS3 CAS4 Test Adapter Can Work With Yanhua Mini ACDP

YH BMW CAS3 CAS4 Test AdapterCAS Tester function: 1. Whether CAS program is running normally.2. Whether CAS data is valid.3. Whether the key is outputting inductive signal.4. Whether the key is legal. …

论文笔记:How Can Recommender Systems Benefit from Large Language Models: A Survey - 详解

论文笔记:How Can Recommender Systems Benefit from Large Language Models: A Survey - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !im…

Service :微服务通信、负载、故障难题的解决方案 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

newDay04

1.做了一些关于方法的小练习,比如说判断数据是否存在,截取数组的一部分数据等,学到了伪造索引的思想,背单词 2.作业还有好些没写,其他课程也该复习巩固了 3.午觉睡太久了,直接干到晚上了

5.WPF控件---ComboBox - 实践

5.WPF控件---ComboBox - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco"…

深圳网站优化网站建设网站 宣传平台

AspectJ1 简介AspectJ&#xff1a;Java社区里最完整最流行的AOP框架。在Spring2.0以上版本中&#xff0c;可以使用基于AspectJ注解或基于XML配置的AOP。2 在Spring中启用AspectJ注解支持导入JAR包springsource.net.sf.cglib-2.2.0.jarspringsource.org.aopalliance-1.0.0.jarsp…

python+springboot+uniapp基于微信小程序的任务打卡框架

python+springboot+uniapp基于微信小程序的任务打卡框架pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&…

SQLserver 通过本地方式改SA密码

1. 以本地管理员身份打开命令提示符(CMD)或 PowerShell按下 Win + R,输入 cmd 或 powershell,右键选择「以管理员身份运行」。2. 使用 sqlcmd 本地连接 SQL Server 如果是默认实例(通常为 MSSQLSERVER),直接连接…