2023牛客OI赛前集训营-提高组(第一场) 情景剧

题目大意

有一个长度为 n n n的序列 h i h_i hi,一段区间 [ l , r ] [l,r] [l,r]的有趣程度为这段区间上 h i h_i hi的最大值 × \times ×最小值 × \times ×区间长度。求所有区间中有趣程度的最大值,输出这个最大值。

保证答案在 unsigned long long \text{unsigned long long} unsigned long long的范围内。

1 ≤ n ≤ 2 × 1 0 6 , 1 ≤ h i ≤ 1 0 9 1\leq n\leq 2\times 10^6,1\leq h_i\leq 10^9 1n2×106,1hi109


题解

假设我们已经确定了区间的最小值 h i h_i hi,那么对于包含 h i h_i hi的区间 [ l , r ] [l,r] [l,r],在保证区间中 h i h_i hi为最小值的情况下,则区间长度肯定是越大越好(因为取的数越多,最大值只会增大或不变,而区间长度只会增大,有趣程度也就不断增大了)。

也就是说,对于每个 h i h_i hi,求出以 h i h_i hi最小值的最大区间,并用这个区间来更新答案即可。

那怎么求以 h i h_i hi最小值的最大区间呢?用并查集可以解决。

我们可以按 h i h_i hi的值从大到小枚举 h i h_i hi,对于一个 h i h_i hi,如果 h i − 1 h_{i-1} hi1在之前就被枚举过了,那么显然其值是比 h i h_i hi大的,其所在联通块的最小值也一定比 h i h_i hi大(在连通块中的都是在之前被枚举过的 h h h值),那么就将 h i h_i hi加入 h i − 1 h_{i-1} hi1所在的连通块。对 h i + 1 h_{i+1} hi+1也是如此。然后, h i h_i hi所在的连通块即为以 h i h_i hi最小值的最大区间,用这个区间更新答案即可。

时间复杂度为 O ( n ⋅ α ( n ) ) O(n\cdot \alpha(n)) O(nα(n))

code

#include<bits/stdc++.h>
using namespace std;
int n,v[2000005],id[2000005],fa[2000005],siz[2000005],z[2000005];
unsigned long long mn[2000005],mx[2000005];
unsigned long long ans=0;
bool cmp(int ax,int bx){return v[ax]>v[bx];
}
int find(int ff){if(fa[ff]!=ff) fa[ff]=find(fa[ff]);return fa[ff];
}
void pt(int x,int y){x=find(x);y=find(y);if(x==y) return;fa[y]=x;siz[x]+=siz[y];mn[x]=min(mn[x],mn[y]);mx[x]=max(mx[x],mx[y]);ans=max(ans,mx[x]*mn[x]*siz[x]);
}
int main()
{scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d",&v[i]);ans=max(ans,1ull*v[i]*v[i]);mn[i]=mx[i]=v[i];siz[i]=1;fa[i]=id[i]=i;}sort(id+1,id+n+1,cmp);for(int i=1;i<=n;i++){int x=id[i];z[x]=1;if(z[x-1]) pt(x-1,x);if(z[x+1]) pt(x+1,x);}printf("%llu",ans);return 0;
}

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

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

相关文章

Linux和Hadoop的学习

目录 1. Linux的常用快捷键2. Hadoop集群部署问题汇总 1. Linux的常用快捷键 复制&#xff1a;CtrlshiftC 粘贴&#xff1a;CtrlshiftV TAB&#xff1a;补全命令 编写输入&#xff1a;i 退出编写&#xff1a;esc 保存并退出&#xff1a;shift&#xff1a; 2. Hadoop集群部署问…

mariadb 错误日志中报错:Incorrect definition of table mysql.column_stats:

数据库错误日志出现此错误原因是因为系统表中字段类型或者数据结构有变动导致&#xff0c;一般是因为升级数据库版本后未同步升级系统表结构。 解决方法&#xff1a; 1.如果错误日志过大&#xff0c;直接删除。 2.执行 mysql_upgrade -u[用户名] -p[密码];&#xff0c;这一步…

Redis-数据过期策略

数据过期策略 惰性删除策略优点&#xff1a;对cpu比较友好&#xff0c;在用到该key的时候才去进行判断&#xff0c;对于很多用不到key不用浪费时间去检查是否过期缺点&#xff1a;对内存不友好&#xff0c;如果一个key过期了&#xff0c;但是我们又一直没有用到该key&#xff0…

508 - Morse Mismatches (UVA)

题目链接如下&#xff1a; Online Judge 这道题我觉得题意有点问题&#xff0c;它写“If multiple context words match morse perfectly, then select the matching word with the fewest characters.”&#xff0c;但按这个题意写的代码无法AC&#xff0c;只能选择最先perf…

一张图搞定英文星期、月份、季节总也搞不定的星期,月份,季节,一张图搞定,还有必用的常见搭配,再也不担心用错介词了~

一张图搞定英文星期、月份、季节 总也搞不定的星期&#xff0c;月份&#xff0c;季节&#xff0c;一张图搞定&#xff0c;还有必用的常见搭配&#xff0c;再也不担心用错介词了~

使用vite+npm封装组件库并发布到npm仓库

组件库背景&#xff1a;使用elementplusvue封装了一个通过表单组件。通过JSX对el-form下的el-input和el-button等表单进行统一封装&#xff0c;最后达到&#xff0c;通过数据即可一键生成页面表单的功能。 1.使用vite创建vue项目 npm create vitelatest elementplus-auto-form…

升级Xcode 15后,出现大量Duplicate symbols问题

https://developer.apple.com/forums/thread/731090 升级到Xcode 15后&#xff0c;原先Xcode14可以编译的项目出现大量Duplicate symbols&#xff0c;且引用报错指向同一个路径&#xff08;一般为Framework&#xff09;下的同一个文件。经过查找相关解决&#xff0c;可通过添加…

JSON文件读写

1、依赖文件 #include <QFile> #include <QJsonDocument> #include <QJsonObject> #include <QDebug> #include <QStringList>2、头文件 bool ReadJsonFile(const QString& filePath""); bool WriteJsonFile(const QString&…

Anaconda的下载与安装

1、下载 Anaconda 这里不管是集成显卡还是独立显卡&#xff0c;第一步先安装Anaconda。 网址&#xff1a;https://mirrors.bfsu.edu.cn/anaconda/archive/ &#xff0c;这里给出的是镜像源&#xff0c;也可以去官网下载&#xff08;下载哪个版本都行&#xff09;。 2、下载完成…

ST表(RMQ问题)

ST表能够O(1)地解决区间[l,r]之间最值问题 1.建表&#xff0c;首先明白ST[i][j]&#xff0c;表示的是区间[i, i(1<<j)-1]的最值&#xff0c;区间大小为2^j。首先初始化ST[i][0]a[i]。 void init&#xff08;&#xff09;{for(int i1; i<n; i){ST[i][0]a[i];} } 因为…

公安部某研究所:代码审核建立安全卡口,为各行业提供优质安全服务保障

某研究所是公安部直属研究所&#xff0c;为组织、企业提供科研创新与技术支撑&#xff0c;保障网络安全&#xff0c;在复杂多变的网络环境中保持安全定力。该研究所帮助政企单位加强网络安全检查与评估&#xff0c;提升保护手段有效性&#xff0c;以新安全格局保障新发展格局。…

【Python_PyQtGraph 学习笔记(八)】基于PyQtGraph将X轴坐标设置为系统时间

【Python_PyQtGraph 学习笔记(八)】基于PyQtGraph将X轴坐标设置为系统时间 前言正文1、获取plotItem的bottom轴对象2、设置刻度值,即获取时间3、刻度值与显示数值绑定4、设置bottom轴的刻度数值显示前言 基于PySide2、PyQtGraph和PySide2动态绘图,将X轴坐标设置为系统事件…

目标检测YOLO实战应用案例100讲-基于无人机航拍图像的目标检测

目录 前言 国内外研究现状 目标检测研究现状 无人机航拍目标检测研究现状

几道web题目

总结几道国庆写的web题目 [ACTF2020 新生赛]Include1 点进去发现就一个flag.php,源代码和抓包都没拿到好东西 结合题目猜是文件包含&#xff0c;构建payload ?filephp://filter/readconvert.base64-encode/resourceflag.php 得到base64编码过的flag&#xff0c;解码即可 此题…

kotlin:LogKit

看到别人的一个代码&#xff0c;觉得有点意思&#xff0c;就复制过来。 package robatimport android.util.Log import java.util.*object LogKit {private val MIN_STACK_OFFSET 3var defaultTag "LogKit"private val lineSeparator System.getProperty("l…

南美巴西市场最全分析开发攻略,收藏一篇就够了

巴西位于南美洲东部&#xff0c;是南美洲资源最丰富&#xff0c;经济活力和经济实力最强的国家。巴西作为拉丁美洲的出口大国&#xff0c;一直是一个比较有潜力的市场&#xff0c;亦是我国外贸公司和独立外贸人集群的地方。中国长期是巴西主要的合作伙伴&#xff0c;2022年占巴…

React组件

一、React组件 函数组件 // 函数组件 // 组件的名称必须首字母大写 // 函数组件必须有返回值 如果不需要渲染任何内容&#xff0c;则返回 null function HelloFn () {return <div>这是我的第一个函数组件!</div> }// 定义类组件 function App () {return (<di…

解决方案:AI赋能工业生产3.0,从工业“制造”到“智造”

视频监控技术是一种既成熟又广泛应用于工业制造领域的先进技术。它可以通过安装各种摄像头和传感器来监测整个生产流程&#xff0c;包括原材料的采购、加工、装配和物流等环节&#xff0c;从而实现对生产过程的实时监控和管理&#xff0c;以及对异常事件的及时预警和响应。 在…

压缩包系列

1、zip伪加密 一个zip文件由三部分组成&#xff1a;压缩源文件数据区压缩源文件目录区压缩源文件目录结束标志。 伪加密原理&#xff1a;zip伪加密是在文件头中加密标志位做修改&#xff0c;然后在打开时误被识别成加密压缩包。 压缩源文件数据区&#xff1a; 50 4B 03 04&a…

安全防御—密码学

1. 什么是APT&#xff1f; APT&#xff08;Advanced Persistent Threat&#xff09;是指高级持续性威胁&#xff0c;本质是针对性攻击。 利用先进的攻击手段对特定目标进行长期持续性网络攻击的攻击形式&#xff0c;APT攻击的原理相对于其他攻击形式更为高级和先进&#xff0c;…