3. El rectángulo más grande *****

  1. El rectángulo más grande
    Descripción del problema
    Hay n rectángulos adyacentes en el eje horizontal, el ancho de cada rectángulo es 1 y la altura del i-ésimo (1 ≤ i ≤ n) rectángulo es
    hi. Estos n rectángulos forman un histograma. Por ejemplo, las alturas de los seis rectángulos en la siguiente figura son 3, 1, 6, 5, 2, 3.
    Encuentre el rectángulo con el área más grande que se puede colocar en el histograma dado, y sus lados deben ser paralelos al eje de coordenadas. Para el ejemplo anterior, el
    rectángulo más grande es la parte sombreada que se muestra en la figura siguiente, y el área es 10.
    Formato de entrada La
    primera línea contiene un número entero n, el número de rectángulos (1 ≤ n ≤ 1000).
    La segunda línea contiene n números enteros h1, h2,…, hn y los números adyacentes están separados por espacios. (1 ≤ hi ≤ 10000). hi
    es la altura del i-ésimo rectángulo.
    Formato de
    salida Muestra una línea que contiene un número entero, es decir, el área del rectángulo más grande en el histograma dado.
    Entrada de muestra
    6
    3 1 6 5 2 3
    Salida de muestra
    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;
}

Supongo que te gusta

Origin blog.csdn.net/KO812605128/article/details/113407187
Recomendado
Clasificación