zoukankan      html  css  js  c++  java
  • Largest Rectangle in a Histogram /// 单调栈 oj23906

    题目大意:

    输入n,,1 ≤ n ≤ 100000,接下来n个数为每列的高度h ≤ hi ≤ 1000000000

    求得最大矩阵的面积

    Sample Input

    7 2 1 4 5 1 3 3
    4 1000 1000 1000 1000
    0

    Sample Output

    8
    4000

     
    #include <bits/stdc++.h>
    #define ll long long
    using namespace std;
    ll n,a[100005],L[100005],R[100005],sta[100005]; // sta[]模拟栈
    int main()
    {
        while(~scanf("%lld",&n)) {
            if(n==0) break;
            for(int i=0;i<n;i++) scanf("%lld",&a[i]);
            int tail=0;
            for(int i=0;i<n;i++) {
                while(tail>0 && a[sta[tail-1]]>=a[i]) tail--;
                L[i]= tail==0 ? 0:sta[tail-1]+1;
                sta[tail++]=i;
            }
            /// L[]存放向左能达到的最远下标
    //        for(int i=0;i<n;i++) printf("%lld ",L[i]);printf("
    ");
            tail=0;
            for(int i=n-1;i>=0;i--) {
                while(tail>0 && a[sta[tail-1]]>=a[i]) tail--;
                R[i]= tail==0 ? n:sta[tail-1];
                sta[tail++]=i;
            }
            /// R[]存放向右能达到的最远下标+1
    //        for(int i=0;i<n;i++) printf("%lld ",R[i]);printf("
    ");
            ll ans=0;
            for(int i=0;i<n;i++)
                ans=max(ans,a[i]*(R[i]-L[i]));
            /// R[i]-L[i]就能得到该矩阵的长度
            printf("%lld
    ",ans);
        }
    
        return 0;
    }
    View Code
  • 相关阅读:
    自学软件测试获取学习资源途径有哪些?
    微信发红包-测试分析
    软件测试初级经验
    面试
    电商项目
    LoadRunner11的安装流程+破解+汉化+下载
    Oracle和Mysql操作上的一些区别
    Android模拟器,ADB命令
    logging
    heapq
  • 原文地址:https://www.cnblogs.com/zquzjx/p/9148741.html
Copyright © 2011-2022 走看看