题目描述

kkk做了一个人体感觉分析器。每一天,人都有一个感受值Ai,Ai越大,表示人感觉越舒适。在一段时间[i, j]内,人的舒适程度定义为[i, j]中最不舒服的那一天的感受值 * [i, j]中每一天感受值的和。现在给出kkk在连续N天中的感受值,请问,在哪一段时间,kkk感觉最舒适?

输入输出格式

输入格式:

第一行为N,代表数据记录的天数

第二行N个整数,代表每一天的感受值

输出格式:

一行,表示在最舒适的一段时间中的感受值。

输入输出样例

输入样例#1:

6
3 1 6 4 5 2
输出样例#1:

60

说明

样例解释:

kkk最开心的一段时间是第3天到第5天,开心值:(6+4+5)*4=60

对于30%的数据,1<=N<=100

对于70%的数据,1<=N<=2000

对于100%的数据,1<=N<=100000,1<=感受值<=1000000


一看貌似就是单调队列优化DP...

然后越看越不像...

我们想一下暴力怎么写,枚举一个点i,值为x,找到左边第一个小于x的位置记为l, 同样的找到右边第一个小于x的位置记作r。

于是显然我们的答案就是x*(qzh[r]-qzh[l-1]),qzh指前缀和数组。这样显然是O(n^2)的,我们考虑优化。

因为题目的特性,很容易想到用单调栈维护递增序列。

我们用单调栈存储下标,保证下标对应的值是单调递增的。

于是我们对于一个新位置i,它的值为x,然后弹掉栈顶值比x大的,直到val[stack[top]] < x。

我们把弹出的那些下标的右端点(即右边第一个比它的值小的位置)设为i。

然后对于新插入的i,我们把i的左端点(与上面类似)设为top-1。

考虑这个做法的正确性。

我们的栈里的坐标是单调递增的,值也是单调递增的,我们新插入的值也如果比前面的小,一定是第一个比前面小的数(显然)。

我们弹晚之后剩下的最后一个一定是坐标最大的比x小的数。

所以我们处理完以上之后再O(n)统计一下答案就行了。


#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
inline int read(){
int res=;char ch=getchar();
while(!isdigit(ch)) ch=getchar();
while(isdigit(ch)){res=(res<<)+(res<<)+(ch^);ch=getchar();}
return res;
}
#define ll long long int n;
int a[];
ll qzh[];
ll stack[], top; //维护下标
int le[], ri[];
ll ans; int main()
{
n = read();
for (int i = ; i <= n ; i ++) a[i] = read(), qzh[i] = qzh[i-] + a[i];
for (int i = ; i <= n ; i ++)
{
while(top and a[stack[top]] >= a[i]) ri[stack[top--]] = i;
le[i] = stack[top];
stack[++top] = i;
}
for (int i = ; i <= n ; i ++) {if (!le[i]) le[i] = ;if (!ri[i]) ri[i] = n;}
for (int i = ; i <= n ; i ++) ans = max(ans, a[i] * (qzh[ri[i]-] - qzh[le[i]]));
printf("%lld\n", ans);
return ;
}

[Luogu2422]良好的感觉的更多相关文章

  1. Luogu2422 | 良好的感觉 (单调栈)

    题目描述 kkk做了一个人体感觉分析器.每一天,人都有一个感受值Ai,Ai越大,表示人感觉越舒适.在一段时间[i, j]内,人的舒适程度定义为[i, j]中最不舒服的那一天的感受值 * [i, j]中 ...

  2. 用Go语言做产品半年的一些感觉

    用Go语言做产品刚好半年,有一些感觉跟大家说道说道. 在使用Go之前,我常常想象,无法使用先进的Debug工具会对工作进度造成多么巨大的影响.甚至在Visual Studio的娇惯下认为,不能调试基本 ...

  3. 推荐一篇关于java 学习的文章,感觉写的很不错

    ---恢复内容开始---    很多网友问我学习Java有没有什么捷径,我说"无他,唯手熟尔".但是我却很愿意将自己学习的一些经验写出来,以便后来者少走弯路,帮助别人是最大的快乐嘛 ...

  4. 第一次使用UML的感觉

    刚开始接触的时候,其实我内心是拒绝的,因为感觉这种软件之前接触过,觉得就是相当于思维导图那种的. 可当自己使用的时候,觉得大纲总体上是类似是规划方向的,可是细节却让人深思,用什么图标,特别是用什么线, ...

  5. 迅雷9、迅雷极速版之迅雷P2P加速:流量吸血鬼?为什么你装了迅雷之后电脑会感觉很卡很卡?

    原文地址:http://www.whosmall.com/post/90 关闭极速版迅雷ThunderPlatform.exe进程 ThunderPlatform.exe目的:利用P2P技术进行用户间 ...

  6. 开发Windows Phone应用程序之后的感觉

    刚刚历时一个多月完成了酒美网(我之前的公司)Windows Phone版客户端,发现自己的自学能力还可以,但是还是有好多东西摸不清,到今天我才刚刚对MVVM入门,更对MVVMLight这个框架有进一步 ...

  7. 自己写的一个SqlHelper,感觉使用起来挺方便的

    自己写的一个SqlHelper,感觉使用起来挺方便的 using System; using System.Data; using System.Collections.Generic; using ...

  8. 测试一下Word发布刚刚发现通过Word 可以直接发Blog 感觉很新奇,先看看,如果可以呢,将发通知的改了。

      刚刚发现通过Word 可以直接发Blog 感觉很新奇,先看看,如果可以呢,将发通知的改了.   刚刚发现通过Word 可以直接发Blog 感觉很新奇,先看看,如果可以呢,将发通知的改了.     ...

  9. 推荐一些常用感觉不错的jQuery插件

    转:http://www.cnblogs.com/v10258/p/3263939.html JQuery插件繁多,下面是个人在工作和学习中用到感觉不错的,特此记录. UI: jquery UI(官方 ...

随机推荐

  1. CSS——字体

    1.字体样式font-family.颜色color <!DOCTYPE html> <html> <head> <meta charset="UTF ...

  2. Day 15 文件打包与压缩

    1.什么是文件压缩? 将多个文件或目录合并成为一个特殊的文件.比如: 搬家...脑补画面 img. 2.为什么要对文件进行压缩? 当我们在传输大量的文件时,通常都会选择将该文件进行压缩,然后在进行传输 ...

  3. java8 新特性精心整理(全)

    前言 越来越多的项目已经使用 Java 8 了,毫无疑问,Java 8 是Java自Java 5(发布于2004年)之后的最重要的版本.这个版本包含语言.编译器.库.工具和 JVM 等方面的十多个新特 ...

  4. OAuth2.0摘要

    一.简介 不使用oauth2.0协议,资源所有者直接给需要使用资源的第三方应用共享凭据时,有这些问题: 需要直接共享给第三方应用凭据 需要服务器支持密码身份验证 凭据的访问权限过大,失去对访问时间和范 ...

  5. [Leetcode][动态规划] 第935题 骑士拨号器

    一.题目描述 国际象棋中的骑士可以按下图所示进行移动:                           我们将 “骑士” 放在电话拨号盘的任意数字键(如上图所示)上,接下来,骑士将会跳 N-1 步 ...

  6. [sonarqube的使用] sonarqube安装

    一 . SonarQube代码质量检查工具简介 Sonar (SonarQube)是一个开源平台,用于管理源代码的质量 Sonar 不只是一个质量数据报告工具,更是代码质量管理平台 支持Java, C ...

  7. 前台提交数据到node服务器(get方式)

    .有两种办法,一种是表单提交,一种是ajax方式提交. 1.form提交  在前台模板文件上写: <form action="/reg" method="get&q ...

  8. 使用命令行创建maven web项目

    一,前言 遇到了一个非常简单的maven命令: 总的来说,这是一个用maven创建一个jersey快速开始项目的maven命令. 这次不妨使用maven命令来构建项目,看体验如何. 在文章idea m ...

  9. redis 获取自增数

    近期,有一个项目需要用到数字的自增整数,范围是0-199999,但公司数据库是mongodb.同时装有mysql.redis等存储数据的这些数据库,其中redis是集群模式,mongodb是paa(  ...

  10. MyEclipse 中无法直接使用BaseEncoder问题

    首先 :点击项目---->build path--->configure Build Path 然后:java build path --->libraries--->JRE ...