传送门

Time Limit: 3000MS  Memory Limit: 65536K
Case Time Limit: 1000MS  Special Judge
 

Description

Bill is developing a new mathematical theory for human emotions. His recent investigations are dedicated to studying how good or bad days influent people's memories about some period of life.

A new idea Bill has recently developed assigns a non-negative integer value to each day of human life.

Bill calls this value the emotional value of the day. The greater
the emotional value is, the better the daywas. Bill suggests that the
value of some period of human life is proportional to the sum of the
emotional values of the days in the given period, multiplied by the
smallest emotional value of the day in it. This schema reflects that
good on average period can be greatly spoiled by one very bad day.

Now Bill is planning to investigate his own life and find the period
of his life that had the greatest value. Help him to do so.

Input

The
first line of the input contains n - the number of days of Bill's life
he is planning to investigate(1 <= n <= 100 000). The rest of the
file contains n integer numbers a1, a2, ... an ranging from 0 to 106 - the emotional values of the days. Numbers are separated by spaces and/or line breaks.

Output

Print
the greatest value of some period of Bill's life in the first line. And
on the second line print two numbers l and r such that the period from
l-th to r-th day of Bill's life(inclusive) has the greatest possible
value. If there are multiple periods with the greatest possible
value,then print any one of them.

Sample Input

6
3 1 6 4 5 2

Sample Output

60
3 5

Source


Solution
单调栈

Implementation
#include <cstdio>
#include <stack>
#include <iostream>
using namespace std;
typedef long long LL; const int N(1e5+); int h[N], L[N], R[N], st[N];
LL s[N]; int main(){
int n;
scanf("%d", &n);
for(int i=; i<=n; i++) scanf("%d", h+i);
for(int i=; i<=n; i++) s[i]=s[i-]+h[i];
// (L[i], R[i]]
int t=-; //top of stack
for(int i=; i<=n; i++){
for(; ~t && h[st[t]]>=h[i]; t--);
L[i]=~t?st[t]:; //error-prone
st[++t]=i;
}
t=-;
for(int i=n; i; i--){
for(; ~t && h[st[t]]>=h[i]; t--);
R[i]=~t?st[t]-:n;
st[++t]=i;
}
LL res=-; //error-prone
int l, r;
for(int i=; i<=n; i++){
LL t=h[i]*(s[R[i]]-s[L[i]]);
if(t>res){
res=t;
l=L[i]+, r=R[i];
}
}
printf("%lld\n%d %d\n", res, l, r);
return ;
}

代码里标error-prone的地方都是坑,请特别注意。

尤其 res应初始化成-1,因为"A new idea Bill has recently developed assigns a non-negative integer value to each day of human life."

最新文章

  1. (20160602)开源第三方学习之SDWebImage
  2. LR翻页脚本并在每页实现业务操作
  3. jdbc操作步骤和preparedStatment相比Statment的好处
  4. Redis入门学习
  5. python 标准模块 string
  6. uboot中的命令体系
  7. Apache Kafka简介与安装(一)
  8. BUAAOO-Second-Summary
  9. 从字节码看java中 this 的隐式传参
  10. mysql之代码执行结构
  11. JQuery基础-- Ajax
  12. [CB]2018全球半导体营收4700亿美元 三星继续碾压英特尔
  13. Android 支付密码输入框,自定义EditText实现密码输入框功能;
  14. Maven Web应用
  15. 十八、curator recipes之DistributedDelayQueue
  16. P2471 [SCOI2007]降雨量
  17. RabbitMQ与.net core(五) topic类型 与 headers类型 的Exchange
  18. SQL查询刚開始学习的人指南读书笔记(二)创建SQL查询
  19. [Err]1418 This function has none of DETERMINISTIC,NO SQL,or R
  20. 图解源码之FutureTask篇(AQS应用)

热门文章

  1. linux下正向代理/反向代理/透明代理使用说明
  2. Iron man
  3. RDLC使用手册_RDLC报表部署
  4. usb驱动开发4之总线设备驱动模型
  5. main函数中argc和argv含义
  6. [CareerCup] 9.3 Magic Index 魔法序号
  7. HoloLens开发手记 - Unity之摄像头篇
  8. 【Lucene实验1】构建索引
  9. iOS简易柱状图(带动画)--新手入门篇
  10. Java学习笔记(十八)——Java DTO