洛谷 P2659 美丽的序列 解题报告

编程入门 行业动态 更新时间:2024-10-27 23:20:49

洛谷 P2659 美丽的<a href=https://www.elefans.com/category/jswz/34/1769864.html style=序列 解题报告"/>

洛谷 P2659 美丽的序列 解题报告

P2659 美丽的序列

题目背景

GD是一个热衷于寻求美好事物的人,一天他拿到了一个美丽的序列。

题目描述

为了研究这个序列的美丽程度,GD定义了一个序列的“美丽度”和“美丽系数”:对于这个序列的任意一个区间\([l,r]\),这个区间的“美丽度”就是这个区间的长度与这个区间的最小值的乘积,而整个序列的“美丽系数”就是它的所有区间的“美丽度”的最大值。现在GD想要你帮忙计算这个序列的“美丽系数”。

输入输出格式

输入格式:

第一行一个整数n,代表序列中的元素个数。 第二行n个整数a1、a2„an,描述这个序列。

输出格式:

一行一个整数,代表这个序列的“美丽系数”。

说明:

对于100%的数据,\(1<=n<=2000000,0<=ai<=2000000\)


思路:维护每个值作为某个区间的最小值时,可以到达的区间长度。

用一个单增的单调栈从两边分别维护一遍即可。


Code:

#include <cstdio>
#define ll long long
ll max(ll x,ll y){return x>y?x:y;}
const int N=2000010;
ll read()
{ll x=0;char c;while(c<'0'||c>'9') c=getchar();while(c>='0'&&c<='9') {x=(x<<3)+(x<<1)+c-'0';c=getchar();}return x;
}
int s[N],tot,n;
ll a[N],l[N],r[N];
int main()
{n=read();for(int i=1;i<=n;i++)a[i]=read();for(int i=1;i<=n;i++){while(tot&&a[s[tot]]>=a[i]) l[i]+=l[s[tot--]];l[i]++;s[++tot]=i;}tot=0;for(int i=n;i;i--){while(tot&&a[s[tot]]>=a[i]) r[i]+=r[s[tot--]];r[i]++;s[++tot]=i;}ll ans=0;for(int i=1;i<=n;i++)ans=max(ans,(l[i]+r[i]-1)*a[i]);printf("%lld\n",ans);return 0;
}

2018.7.23

转载于:.html

更多推荐

洛谷 P2659 美丽的序列 解题报告

本文发布于:2024-02-11 23:47:24,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1684375.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:序列   美丽   报告   洛谷

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!