单调队列,滑动窗口

int t=0;
while(scanf("%d",&n)==1){
if(t)
printf("\n"); //有点方便

单调队列用deque很方便
for(int i=1;i<=n;i++){ 维护单调队列
while(!q.empty()&&a[i]<=a[q.back()]){
R[q.back()]=i-1;
q.pop_back();
}
if(q.empty())L[i]=1;
else L[i]=q.back()+1;
q.push_back(i);
}
while(!q.empty()){
R[q.back()]=n;
q.pop_back();
}

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <queue>
typedef long long LL;
using namespace std;
const int maxn=;
int n;
int a[maxn],L[maxn],R[maxn];//l[i]表示以a[i]为最小值的左半区间的最左边端点,r[i]表示以a[i]为最小值的右半区间的最右边端点
LL sum[maxn]; int main(){
int t=;
while(scanf("%d",&n)==){
if(t)
printf("\n");
t++;
sum[]=;
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
sum[i]=sum[i-]+a[i];
}
deque<int>q;
for(int i=;i<=n;i++){
while(!q.empty()&&a[i]<=a[q.back()]){
R[q.back()]=i-;
q.pop_back();
}
if(q.empty())L[i]=;
else L[i]=q.back()+;
q.push_back(i);
}
while(!q.empty()){
R[q.back()]=n;
q.pop_back();
}
LL ans=;
int ansL=,ansR=;
for(int i=;i<=n;i++){
if(ans<(sum[R[i]]-sum[L[i]-])*a[i]){
ans=(sum[R[i]]-sum[L[i]-])*a[i];
ansL=L[i],ansR=R[i];
}
}
printf("%lld\n",ans);
printf("%d %d\n",ansL,ansR);
}
return ;
}

uva1619 Feel Good的更多相关文章

  1. UVA1619 栈维护递增序列

    先说这题的关键性质:每一个数应该只会计算一次,它有一个最小区间[L,R],即它在这个区间内是最小的,最小区间内任何包含它的子区间都不会大于F(L,R)=(a[L]+...+a[R])*min(a[l] ...

  2. UVA-1619 Feel Good (单调队列)

    题目大意:给一个非负整数序列,求出一个使得区间和乘以区间最小值最大的区间. 题目分析:单调队列.维护两个数组,l[i]表示以a[i]为最小值的左半区间的最左边端点,r[i]表示以a[i]为最小值的右半 ...

  3. uva1619

    分析:这个题的关键是要找到,当某个值是最小值时它最大的影响区间时什么.可以通过单调队列(单调栈)在nlogn的时间内实现 #include <cstdio> #include <cs ...

  4. UVA1619 感觉不错 Feel Good(良好的感觉) 题解

    0.题面: 给出正整数n和一个(1 <= n <= 100 000)长度的数列,要求找出一个子区间,使这个子区间的数字和乘上子区间中的最小值最大.输出这个最大值与区间的两个端点. 1.思路 ...

  5. Uva 1609 Feel Good

    题面:给出长度为n的数列,然后算出其区间和乘区间最小数所能得到的最大值,并且输出区间 样例输入: 6 3 1 6 4 5 2 样例输出: 60 3 5 原题链接:https://vjudge.net/ ...

随机推荐

  1. 从MyEclipse到IntelliJ IDEA

    如何做到全键盘操作呢? 1.自定义快捷键实现全屏操作 你可以设置自定义快捷键进入全屏操作,并实现各个窗口之间的切换.这样,你就可以告别小窗口的时代,体验全屏显示的效果了!(相信有过多年开发经验的你一定 ...

  2. Servlet3.0之九:web模块化

    一.使用web-fragment.xml 在Servlet 3.0中,可以使用标注来设置Servlet的相关信息.实际上,Web容器并不仅读取/WEB-INF/classes中的Servlet标注信息 ...

  3. 常用的Ant风格书写

    原文地址 Ant风格,为请求路径的一种匹配方式 通配符 说明 ? 匹配任意一个字符 * 匹配任意字符(包括0个) **  匹配任意层路径(包括0个) 支持Ant风格 1.spring资源加载 clas ...

  4. django-ckeditor表情包修改

    一.版本 Django==1.11 django-ckeditor==5.2.2 二.关键步骤 1.删除旧的ckeditor静态文件 所在目录:项目目录下的static文件夹下的ckditor文件夹 ...

  5. POJ2366【二分】

    题意: 给两个序列,问两个序列中是否有两个数加起来=1e4: 思路: 直接先排序好b序列,然后枚举a序列,二分查找b序列就好了: 贴一发挫code-. //#include <bits/stdc ...

  6. 基于FBX SDK的FBX模型解析与加载 -(三)

    http://blog.csdn.net/bugrunner/article/details/7229416 6. 加载Camera和Light 在FBX模型中除了几何数据外较为常用的信息可能就是Ca ...

  7. 百度编辑器ueditor插件的基本使用

    注意:该插件是基于tpframe开发,请在tpframe框架上使用 插件下载地址:https://pan.baidu.com/s/1MOJbd1goQC0Bn5-7HcIdKA 插件下载下来后解压到a ...

  8. IT兄弟连 JavaWeb教程 请求转发案例

    CheckServlet类与OutputServlet类之间为请求转发关系.在web.xml文件中,为CheckServlet映射的URL为"/check",为OutputServ ...

  9. jquery $.trim()方法的介绍

    http://www.jb51.net/article/50282.htm

  10. 转 PHP scandir() 函数

    实例 列出 images 目录中的文件和目录: <?php $dir = "/images/"; // 以升序排序 - 默认 $a = scandir($dir); // 以 ...