单调队列,滑动窗口

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. bzoj1911 [Apio2010]特别行动队——斜率优化DP

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1911 相当明显的斜率优化,很好做: 注意slp里面要有(double),以免出现精度问题. ...

  2. 【转】 IntelliJ IDEA 中 Project 和 Module 的概念及区别

    原文地址:https://blog.csdn.net/qq_35246620/article/details/65448689 在 IntelliJ IDEA 中,没有类似于 Eclipse 工作空间 ...

  3. Spring AOP schema找不到报错 原

    转自:https://my.oschina.net/zetaplusae/blog/144821 使用jersey+spring构建RESTful服务,并将应用部署在不能连接外网的服务器上.部署时,报 ...

  4. windows cmd下如何暂停(挂起)运行中的进程

    在Linux下做开发时,我们都熟知Ctrl+Z的指令,作用就是把当前运行的程序转到后台,暂停执行,等到合适的时候再使用fg指令把这个程序调出来再次执行.这功能也不常用,但有时候还挺必要. 那么wind ...

  5. 简单聊聊ES6-Promise和Async

    前言 本篇博文出至于我的github仓库:web-study,如果你觉得对你有帮助欢迎star,你们的点赞是我持续更新的动力,谢谢! 异步编程在前端开发中尤为常见,从最早的XHR,到后来的各种封装aj ...

  6. 为什么选择SSM+Redis框架开发模式?

    1.选择spring 目前企业的java应用中,spring框架是必须的,spring的核心是IOC(控制反转),它是一个大容器,方便组装和管理各类系统内外部资源,同时支持AOP(控制反转),这是对面 ...

  7. CF1059D Nature Reserve(二分)

    简洁翻译: 有N个点,求与y=0相切的,包含这N个点的最小圆的半径 题解 二分半径右端点开小了结果交了二十几次都没A……mmp…… 考虑一下,显然这个半径是可以二分的 再考虑一下,如果所有点都在y轴同 ...

  8. Adore

    (非公共题目) 问题描述 小 w 偶然间⻅到了一个 DAG.这个 DAG 有 m 层,第一层只有一个源点,最后一层只有一个汇点,剩下的每一层都有 k 个节点. 现在小 w 每次可以取反第 i(1 &l ...

  9. 2.while循环 编码的初识,逻辑运算符 格式化输出

    while循环 循环 while True: # while 是关键字 条件 print('精忠报国') print('团结就是力量') print('北京欢迎你') print('葫芦爷爷救娃娃') ...

  10. 前端笔记之React(二)组件内部State&React实战&表单元素的受控

    一.组件内部的State 1.1 state state叫状态,是每一个类式组件都有的属性,但函数式组件,没有state. state是一个对象,什么值都可以定义. 在任何类式组件的构造函数中,可以用 ...