zoukankan      html  css  js  c++  java
  • uva1619

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

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <algorithm>
     4 #include <iostream>
     5 #include <queue>
     6 using namespace std;
     7 const int maxn=100000+100;
     8 int n;
     9 int a[maxn],L[maxn],R[maxn];
    10 long long sum[maxn];
    11 int main(){
    12     int t=0;
    13     //freopen("out.txt","w",stdout);
    14     while(scanf("%d",&n)!=EOF){
    15         if(t)printf("
    ");
    16         t++;
    17         sum[0]=0;
    18         for(int i=1;i<=n;i++){
    19             scanf("%d",&a[i]);
    20             sum[i]=sum[i-1]+a[i];
    21         }
    22       deque<int>q;
    23       for(int i=1;i<=n;i++){
    24         while(!q.empty()&&a[i]<=a[q.back()]){
    25             R[q.back()]=i-1;
    26             q.pop_back();
    27         }
    28         if(q.empty())L[i]=1;
    29         else L[i]=q.back()+1;
    30         q.push_back(i);
    31       }
    32       while(!q.empty()){
    33         R[q.back()]=n;
    34         q.pop_back();
    35       }
    36       long long ans=0;
    37       int ansL=1,ansR=1;
    38       for(int i=1;i<=n;i++){
    39         if(ans<(long long)(sum[R[i]]-sum[L[i]-1])*a[i]){
    40             ans=(long long)(sum[R[i]]-sum[L[i]-1])*a[i];
    41             ansL=L[i],ansR=R[i];
    42         }
    43       }
    44       printf("%lld
    ",ans);
    45       printf("%d %d
    ",ansL,ansR);
    46     }
    47 return 0;
    48 }
    View Code
  • 相关阅读:
    网站链接
    CSS 初始化
    常见浏览器+浏览器内核
    sublime及其插件的安装
    数码时钟.js
    每天迁移MySQL历史数据到历史库Python脚本
    python和redis简单交互
    python和mongodb简单交互
    python3与mysql交互
    Red Hat Enterprise Linux 7.2修改主机名(hostname)
  • 原文地址:https://www.cnblogs.com/LQLlulu/p/8825038.html
Copyright © 2011-2022 走看看