P2659 美丽的序列

题目链接

https://www.luogu.org/problemnew/show/P2659

题目描述

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

输入输出格式

输入格式:

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

输出格式:

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

输入输出样例

输入样例#1:

3

1 2 3

输出样例#1:

4

说明

样例解释 选取区间[2,3],可以获得最大“美丽系数”为2*2=4。 数据范围 对于20%的数据,n<=2000; 对于60%的数据,n<=200000; 对于100%的数据,1<=n<=2000000,0<=ai<=2000000。 提示 你可能需要一个读入优化。

题解

单调栈板子题,当然也可用笛卡尔树来做,不过没有必要。

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define N 2000050
ll n,a[N],L[N],R[N],sk[N],ans;
template<typename T>void read(T&x)
{
ll k=0; char c=getchar();
x=0;
while(!isdigit(c)&&c!=EOF)k^=c=='-',c=getchar();
if (c==EOF)exit(0);
while(isdigit(c))x=x*10+c-'0',c=getchar();
x=k?-x:x;
}
void read_char(char &c)
{while(!isalpha(c=getchar())&&c!=EOF);}
int main()
{
#ifndef ONLINE_JUDGE
freopen("aa.in","r",stdin);
#endif
read(n);
for(int i=1;i<=n;i++) read(a[i]);
a[n+1]=-1;
int top=0;
for(int i=1;i<=n+1;i++)
{
while(top&&a[i]<a[sk[top]])R[sk[top--]]=i;
L[i]=sk[top];
sk[++top]=i;
}
for(int i=1;i<=n;i++)
ans=max(ans,(R[i]-L[i]-1)*a[i]);
printf("%lld",ans);
}

最新文章

  1. 为不同分辨率单独做样式文件,在页面头部用js判断分辨率后动态加载定义好的样式文件
  2. linux下误删mysql的root用户,解决方法
  3. Python之路Day15--CSS补充以及JavaScript(一)
  4. 基础笔记(三):网络协议之Tcp、Http
  5. mariadb 10.2.3支持延时复制
  6. centos的安装,网络的调试
  7. wp7 xml
  8. Android Studio教程,Android Studio安装教程
  9. jquery.form.js详细讲解
  10. 第二百一十八天 how can I 坚持
  11. Vector/Arraylist与Linklist的区别
  12. poj-3895-Cycles of Lanes 简单DFS
  13. C#设置richtextbox某一段文本颜色
  14. JavaScript之点赞特效
  15. Java运行时数据区概述
  16. 5、Spring-Kafka3
  17. Forward团队-爬虫豆瓣top250项目-需求分析
  18. HttpClient简述
  19. C#子线程中更新ui-----c# 多线程多文件批量下载
  20. artDialog双击会关闭对话框的修改

热门文章

  1. 【线性代数】6-6:相似矩阵(Similar Matrices)
  2. libimobiledevice
  3. 测试的Python、 Java语言之争
  4. 8月清北学堂培训 Day6
  5. python 安装 pyHook
  6. 爬虫之python3用execjs执行JS代码
  7. Hdu5762
  8. POI的XWPFTableCell的方法
  9. 手游折扣app票选结果公布哪个好哪个靠谱一目了然
  10. 阿里云上搭建git