poj2796:http://poj.org/problem?id=2796

题意:给出一个长度为n(n<100000)的序列,求出一个子序列,使得这个序列中的最小值乘以这个序列的和的值最大。

思路:枚举每一个点,然后算出以这个点为最小值的区间能向左向右扩展到哪里,然后选择最优的就行。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e5+;
long long a[N];
long long ll[N],rr[N];
long long sum[N];
int n;
int main(){
while(~scanf("%d",&n)){
memset(sum,,sizeof(sum));
memset(ll,,sizeof(ll));
memset(rr,,sizeof(rr));
memset(a,-,sizeof(a));
sum[]=;
for(int i=;i<=n;i++){
scanf("%I64d",&a[i]);
sum[i]=sum[i-]+a[i];
}
for(int i=;i<=n;i++){
ll[i]=i;
if(i==)continue;
long long t=i-;
while(a[i]<=a[t]){
ll[i]=ll[t];
t=ll[t]-;
}
}
for(int i=n;i>=;i--){
rr[i]=i;
if(i==n)continue;
long long t=i+;
while(a[i]<=a[t]){
rr[i]=rr[t];
t=rr[t]+;
}
}
long long l,r,ans=-;
for(int i=;i<=n;i++){
long long temp=a[i]*(sum[rr[i]]-sum[ll[i]-]);
if(temp>ans){
ans=temp;
l=ll[i];r=rr[i];
}
}
printf("%I64d\n%I64d %I64d\n",ans,l,r);
}
}

随机推荐

  1. C# - 类型

    C#是一门使用OOP技术的编程语言(Object Oriented Programming 面向对象编程)面向对象最重要的特性就是接口.继承.多态 C#中所有的事物都可以看做是一个对象 对象由类型来创 ...

  2. Windows 7系统下局域网文件共享设置方法

    今天给家里增添了一台组装机,小试了一下win7局域网文件共享功能,很爽的说. 记录一下实现方法: 1.关闭防火墙 2.启用共享. 控制面板 – 网络和共享中心 – 更改高级共享设置,将图中的几个选项选 ...

  3. Nginx高并发配置思路(轻松应对1万并发量)

    测试机器为腾讯云服务器1核1G内存,swap分区2G,停用除SSH外的所有服务,仅保留nginx,优化思路主要包括两个层面:系统层面+nginx层面. 一.系统层面 1.调整同时打开文件数量 ulim ...

  4. python: pandas模块

    10分钟入门 pandas 评:我跟作者的智商差距是有多大,才能让我用60分钟看完作者认为10分钟的内容... 详细内容见 Cookbook 习惯上我们先导入 : In [1]: import pan ...

  5. 【转】char码值对应列表大全

    char("56") A char("97") a [转]char码值对应列表大全 Char("0") 为0的字符Char("1& ...

  6. MVC 中的Areas支持

    在ASP.NET MVC 2中对于Area功能的增强,这样的增强是如何在同一个项目中更好地组织应用程序的? ASP.NET MVC 1.0时,如果我们要在一个项目中做自己网站的后台应用,而又保持URL ...

  7. js使用

    js使用 HTML 中的脚本必须位于 <script> 与 </script> 标签之间. 脚本可被放置在 HTML 页面的 <body> 和 <head&g ...

  8. js - get-the-value-from-the-url-parameter(可以在非模态对话框中使用)

    ref: http://stackoverflow.com/questions/979975/how-to-get-the-value-from-the-url-parameter 函数: funct ...

  9. 在.Net中进行跨线程的控件操作(上篇:Control.Invoke)

    本文的重点在于介绍如何在多线程编程中,从非UI线程上访问界面中的控件.有过多线程编程经验的人都知道,当我们在非UI线程上试图给一个界面中的控件赋值的时候,比如说label的Text属性,系统会抛出一个 ...

  10. jsp中<c:if>与<s:if>的区别

    <c:if>时jstl标签,一般与el表达式一起使用,参考http://www.360doc.com/content/11/1121/16/7874148_166229306.shtml ...