ABC234G Divide a Sequence 题解

题目来源

  • ABC234G

  • 洛谷

Description

给定长度为 n n n 的序列 { a n } \{a_n\} {an}。定义一种将 { a n } \{a_n\} {an} 划分为若干段的方案的价值为每段的最大值减去最小值的差的乘积。求所有划分方案的价值的总和并对 998244353 998244353 998244353 取模。

  • 1 ≤ n ≤ 3 × 1 0 5 , 1 ≤ a i ≤ 1 0 9 1\le n\le3\times10^5,1\le a_i\le10^9 1n3×105,1ai109

Solution

由于要求所有划分方案的总和,并且难以存储划分的具体方案,因此我们可以通过动态规划来避免对具体方案进行讨论。

同时,我们可以将求乘积的和转化为将之前求出的和乘上同一个数。

具体而言,若设 f i f_i fi 表示 a 1 ⋯ i a_{1\cdots i} a1i 的划分方案价值之和,则:

f i = ∑ j = 1 i − 1 ( f j × ( max ⁡ k = j + 1 i { a k } − min ⁡ k = j + 1 i { a k } ) ) f_i=\sum_{j=1}^{i-1}\Bigg(f_j\times\Big(\max_{k=j+1}^{i}\{a_k\}-\min_{k=j+1}^i\{a_k\}\Big)\Bigg) fi=j=1i1(fj×(k=j+1maxi{ak}k=j+1mini{ak}))

但这么做效率显然不优,而我们又可以将 max ⁡ \max max min ⁡ \min min 分为两个独立的问题进行处理,于是我们应考虑分别计算 Maxsum i = ∑ j = 1 i − 1 ( f j × max ⁡ k = j + 1 i { a k } ) \text{Maxsum}_i=\sum\limits_{j=1}^{i-1}\Big(f_j\times\max\limits_{k=j+1}^{i}\{a_k\}\Big) Maxsumi=j=1i1(fj×k=j+1maxi{ak}) 以及 Minsum i = ∑ j = 1 i − 1 ( f j × min ⁡ k = j + 1 i { a k } ) \text{Minsum}_i=\sum\limits_{j=1}^{i-1}\Big(f_j\times\min\limits_{k=j+1}^{i}\{a_k\}\Big) Minsumi=j=1i1(fj×k=j+1mini{ak}),则 f i = Maxsum i − Minsum i f_i=\text{Maxsum}_i-\text{Minsum}_i fi=MaxsumiMinsumi

由于 max ⁡ \max max min ⁡ \min min 的计算类似,接下来以 max ⁡ \max max 的相关计算为例。

可以观察到,若将 i i i 1 1 1 枚举到 n n n,每次 f j × max ⁡ k = j + 1 i { a k } f_j\times\max\limits_{k=j+1}^{i}\{a_k\} fj×k=j+1maxi{ak} 的变化是有限的。即 max ⁡ k = j + 1 i { a k } \max\limits_{k=j+1}^{i}\{a_k\} k=j+1maxi{ak} 只有一段会存在变化,而这一段一定是一个区间 [ x , i ) [x,i) [x,i),其中 x = max ⁡ t < i , a t > a i t x=\max\limits_{t<i,a_t>a_i}t x=t<i,at>aimaxt,可结合下图理解(只有黑色矩形所在的下标可能成为最大值,且其是最大值的区间在其前一个黑色矩形所在下标到它前一个下标之间,如红色区间所示)。

那么我们可以看出来这需要运用到单调栈,栈中储存的是黑色矩形所在下标,用于求出图片上面定义的 x x x 的值。而在同一个红色区间内,最大值不变,只需对 f i f_i fi 进行求和。因此,若设 fsum \text{fsum} fsum f f f 的前缀和函数,我们可以得到 Maxsum i = Maxsum x + ( fsum i − 1 − fsum x − 1 ) × a i \text{Maxsum}_i=\text{Maxsum}_x+(\text{fsum}_{i-1}-\text{fsum}_{x-1})\times a_i Maxsumi=Maxsumx+(fsumi1fsumx1)×ai,那么 max ⁡ \max max 就可以在 O ( n ) O(n) O(n) 求出, min ⁡ \min min 同理,单调栈的具体过程可参考代码。

Code

#include <bits/stdc++.h>
using namespace std;
const int p=998244353;
int n,a[300005],Max[300005],top,Maxsum[300005],Min[300005],top2,Minsum[300005],f[300005],fsum[300005];
int main(){scanf("%d",&n);for (int i=1;i<=n;i++) scanf("%d",&a[i]);f[0]=fsum[0]=1;for (int i=1;i<=n;i++){while (top&&a[i]>=a[Max[top]]) top--;while (top2&&a[i]<=a[Min[top2]]) top2--;if (top) Maxsum[i]=(Maxsum[Max[top]]+1ll*(fsum[i-1]-fsum[Max[top]-1]+p)%p*a[i]%p)%p;else Maxsum[i]=1ll*fsum[i-1]*a[i]%p;if (top2) Minsum[i]=(Minsum[Min[top2]]+1ll*(fsum[i-1]-fsum[Min[top2]-1]+p)%p*a[i]%p)%p;else Minsum[i]=1ll*fsum[i-1]*a[i]%p;f[i]=(Maxsum[i]-Minsum[i]+p)%p,fsum[i]=(fsum[i-1]+f[i])%p;Max[++top]=i,Min[++top2]=i;}printf("%d\n",f[n]);return 0;
}

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

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

相关文章

项目实训-vue(十一)

项目实训-vue&#xff08;十一&#xff09; 文章目录 项目实训-vue&#xff08;十一&#xff09;1.概述2.页顶导航栏3.导航信息4.总结 1.概述 本篇博客将记录我在图片上传页面中的工作。 2.页顶导航栏 <divstyle"display: flex;justify-content: space-between;alig…

如何挑选洗地机?盘点口碑最好的四大洗地机

在购买洗地机这种智能家电时&#xff0c;大家都应该格外谨慎。毕竟&#xff0c;洗地机价格不菲&#xff0c;精打细算&#xff0c;确保物尽其用才是最重要的。谁都不想花了高价买回来却让它闲置在墙角落灰尘。买之前我们还是需要对自己的需求做一个清晰的判断&#xff0c;实用性…

【unity笔记】六、UI实现下拉列表切换视角

具体步骤如下 1. 创建UI下拉列表&#xff1a; 在Unity场景中右键点击并选择UI -> 下拉列表 来创建一个新的下拉列表。 2. 添加摄像机选项&#xff1a; 在Dropdown的Options属性中添加新的选项&#xff0c;通过点击按钮来添加选项&#xff0c;并为每个选项设置一个显示名…

sourceTree 和Tortoise git软件的对比,以及使用sourceTree管理公司托管的 gitlab 项目或github项目

文章目录 Tortoisegit 和sourcetree的比较如何添加 gitlab 的社区版账号总结参考资料 Tortoisegit 和sourcetree的比较 我在 window都是用 Git 小乌龟&#xff08;Tortoise git&#xff09;来可视化管理 Git 项目。这时是不区分 Git 平台的&#xff0c;也就是不管你用的是 Git…

生产看板管理系统内容有哪些?

相信很多做生产管理的朋友都会遇到如下问题&#xff0c;我就在想&#xff0c;是否能一个创建“透明的”的工作场所&#xff1f;让员工和管理者能够实时查询生产进度&#xff0c;及时发现生产中的问题。 生产进度难追踪 生产过程不透明 生产决策缺乏数据支持 ——能&#xf…

ROS CDK魔法书:点亮博客上云新技能(TypeScript篇)

引言 在数字世界的浩瀚海洋中&#xff0c;信息与数据如同戏剧中的主角&#xff0c;舞动着无形的旋律&#xff0c;构建起信息时代的交响乐。而在这其中&#xff0c;作为一位技术领域的探索者&#xff0c;你的使命便是挥舞着编码的魔杖&#xff0c;创造和守护着这些宝贵的数字灵…

PointCloudLib 3D对象的可视化 C++版本

0.实现效果 显示箭头 vtkOutputWindow::SetGlobalWarningDisplay(0);pcl::visualization::PCLVisualizer::Ptr viewer(new pcl::visualization::PCLVisualizer("3D Viewer"));viewer->setBackgroundColor(1, 1, 1);//添加箭头显示pcl::PointXYZ pA(0, 0, 0);pcl:…

openfeign的原理 ????

1、我们使用openfeign调用远程接口就像调用本地方法一样简单。 2、支持spring mvc 注解 3、整合了更多的扩展 &#xff08;请求重试策略、超时控制、请求拦截器&#xff09; 4、open Feign是基于aop的原理&#xff0c;他会通过所加FeignClient的接口&#xff0c;自动拼接接口…

准备篇(三)网页相关知识

Java script小脚本 - 爬取 bilibili 表情Java script 小脚本 - 爬取 bilibili 表情 随便点开一个视频,注意这个页面 URL 对应的 HTML 代码中没有表情的代码, 需要先点一下评论区,然后再在这个页面 URL 对应的元素中找到表情所在的源码。(但是我不知道这个带表情 <pic…

使用ShellHub搭建集中式SSH

SSH 是 Secure Socket Shell 或安全 shell 的缩写。这是一种加密协议&#xff0c;用于通过不安全的网络管理和创建两台计算机之间的安全通信。 SSH 还可用于指代实现 SSH 协议的实用程序套件。有多种身份验证机制&#xff0c;最常见的一种是密码身份验证&#xff0c;但也有基于…

夏老师小课堂(10)影响电机尺寸的因素(2)-电机转速的增加

点击上方 “机械电气电机杂谈 ” → 点击右上角“...” → 点选“设为星标 ★”&#xff0c;为加上机械电气电机杂谈星标&#xff0c;以后找夏老师就方便啦&#xff01;你的星标就是我更新动力&#xff0c;星标越多&#xff0c;更新越快&#xff0c;干货越多&#xff01; 关注我…

【Ant Design Vue的更新日志】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

智慧校园-后勤管理系统总体概述

在今天这个信息化飞速发展的时代&#xff0c;智慧校园后勤管理系统就像一股清新的风&#xff0c;悄悄吹走了过去校园后勤工作中的一些老难题。它就像是个超级聪明的帮手&#xff0c;用上了物联网、大数据那些听起来就很高大上的技术&#xff0c;目的很简单&#xff0c;就是让学…

供应链云仓APP开发:物流行业的数字化转型

在数字化时代&#xff0c;供应链管理正经历着前所未有的变革。供应链云仓APP开发作为这一变革的关键驱动力&#xff0c;为企业提供了一个集成化、智能化的物流解决方案。本文将深入探讨供应链云仓APP开发的重要性、核心功能、开发策略以及它如何助力企业实现物流管理的现代化。…

【独家首发】ONLYOFFICE 8.1:革新办公体验,释放无限创意潜能!

一、全能PDF编辑器&#xff1a;重塑文档管理艺术 官方链接 官方链接&#xff1a;https://www.onlyoffice.com/zh/【点击跳转】 【办公界的变形金刚】ONLYOFFICE 8.1&#xff1a;让文件编辑比变魔术还神奇&#xff0c;一键解锁创意新高度&#xff01;" 在这个数字化的狂潮中…

百元蓝牙耳机哪款好?值得购买的百元蓝牙耳机品牌有这些

在如今移动互联网时代&#xff0c;蓝牙耳机已经成为不少人生活中的必备产品。然而&#xff0c;市面上的蓝牙耳机种类繁多&#xff0c;价格也参差不齐&#xff0c;选择一款性价比高的产品成了不少消费者的难题。尤其是针对百元左右的蓝牙耳机&#xff0c;更是需要慎重选择。那么…

详解 ClickHouse 的副本机制

一、简介 副本功能只支持 MergeTree Family 的表引擎&#xff0c;参考文档&#xff1a;https://clickhouse.tech/docs/en/engines/table-engines/mergetree-family/replication/ ClickHouse 副本的目的主要是保障数据的高可用性&#xff0c;即使一台 ClickHouse 节点宕机&#…

苹果电脑压缩pdf文件,苹果电脑里如何压缩pdf文件

压缩PDF文件是现代办公和日常生活中经常需要处理的一项任务&#xff0c;无论是为了节省存储空间、方便网络传输&#xff0c;还是为了在移动设备上更流畅地阅读文档&#xff0c;学会有效地压缩PDF都显得尤为重要。在本文中&#xff0c;我们将详细探讨压缩PDF的方法&#xff0c;从…

选型宝典(一)AMD Xilinx 7系列FPGA选型指导

引言introduction Xilinx 7系列FPGA采用28nm工艺&#xff0c;是近年来Xilinx公司推出的一系列高性价比的、应用领域最广泛的可编程逻辑器件。28nm FPGA包含了多个不同的产品线&#xff0c;如Spartan-7、Artix-7、Kintex-7和Virtex-7以及ZYNQ7000。 1、7系列特点概述 Spartan-…

界面控件DevExpress WinForms启动界面组件,让你的应用更个性化!

DevExpress WinForms的启动界面组件能帮助用户为WinForms应用程序创建令人惊叹的应用启动屏幕、覆盖和等待窗体等。 DevExpress WinForms拥有180组件和UI库&#xff0c;能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用…