3.最大の長方形*****

  1. 最大の長方形
    問題の説明
    横軸にn個の隣接する長方形があります。各長方形の幅は1で、i番目(1≤i≤n)の長方形の高さは
    hiです。これらのn個の長方形はヒストグラムを形成します。たとえば、次の図の6つの長方形の高さは、3、1、6、5、2、3です。
    与えられたヒストグラムに配置できる最大の面積を持つ長方形を見つけてください。その辺は座標軸に平行である必要があります。上記の例では、
    最大の長方形は下の図に示す影付きの部分であり、面積は10です。
    入力形式
    最初の行には、整数n、長方形の数(1≤n≤1000)が含まれています。
    2行目にはn個の整数h1、h2、…、hnが含まれ、隣接する数値はスペースで区切られます。(1≤hi≤10000)。hi
    はi番目の長方形の高さです。
    出力形式
    整数、つまり、指定されたヒストグラムで最大の長方形の領域を含む行を出力します
    サンプル入力
    6
    3 1 6 5 2 3
    サンプル出力
    10
#include <bits/stdc++.h>

using namespace std;

int main()
{
    
    
    int n, a[1010], area, temp, ans = 0;
    cin>>n;
    for(int i = 0; i < n; i++)
        cin>>a[i];
    a[n] = 0;
    stack<int> s;
    for(int i = 0; i <= n; i++)
        if(s.empty() || a[s.top()] < a[i])
            s.push(i);
        else
        {
    
    
            temp = s.top();
            s.pop();
            area = a[temp] * (s.empty() ? i : i - s.top() - 1);
            if(area > ans)
                ans = area;
            i--;
        }
    cout<<ans<<endl;
    return 0;
}

おすすめ

転載: blog.csdn.net/KO812605128/article/details/113407187