zoukankan      html  css  js  c++  java
  • CodeFroces-- Feel Good

    题目大意:给出一段无序数组找出任意 一段区间和*这段区间的最小值 使这个值最大

    栈的经典问题

    用栈预处理出当前ai 为这块区间最小值的时候 的区间范围(L 和R)

    #include<bits/stdc++.h>
    using namespace std;
    #define maxn 100015
    #define LL long long
    LL  ll[maxn],rr[maxn];
    stack<LL >s,t;
    LL  sum[maxn];
    LL  a[maxn];
    int main(){
      //freopen("feelgood.in","r",stdin);
      //freopen("feelgood.out","w",stdout);
      LL  n;
      cin>>n;
      memset(sum,0,sizeof(sum));
      for(LL  j=1;j<=n;j++){
         cin>>a[j];
         sum[j]=a[j]+sum[j-1];
      }
      for(LL  j=1;j<=n;j++){
         while(s.size()&&a[j]<=a[s.top()]){
            s.pop();
         }
         if(!s.size()) ll[j]=1;
         else ll[j]=s.top()+1;
         s.push(j);
      }
    
      for(LL  j=n;j>=1;j--){
         while(t.size()&&a[j]<=a[t.top()]){
            t.pop();
         }
         if(!t.size()) rr[j]=n;
         else rr[j]=t.top()-1;
         t.push(j);
         //cout<<rr[j]<<endl;
      }
      LL mx=-1,l,r;
      for(LL  j=1;j<=n;j++){
         LL ans=1LL*a[j]*(sum[rr[j]]-sum[ll[j]-1]);
         if(ans>mx){
            mx=ans;
            l=ll[j];
            r=rr[j];
         }
      }
      cout<<mx<<endl;
      cout<<l<<" "<<r<<endl;
    }
  • 相关阅读:
    布局管理
    菜单和工具栏
    Hello World,本章学习Qt的基本功能
    PyQt5中文手册
    qemu-kvm使用
    查看内核日志
    tmux快捷键
    vim插件YouCompleteMe安装
    git submodule删除多余模块
    vim ctags
  • 原文地址:https://www.cnblogs.com/Dvelpro/p/9888092.html
Copyright © 2011-2022 走看看