pila monótono: máximo rectángulo c ++.

El rectángulo máximo

Aquí Insertar imagen Descripción
Que comprende una pluralidad de conjuntos de datos de entrada. Cada conjunto de datos se representa mediante un número entero n de pequeño histograma rectangular, se puede suponer 1 <= n <= 100000. entonces el siguiente n números enteros H1, ..., Hn, que satisface 0 <= hi <= 1000000000. Estas cifras de izquierda a derecha en el histograma representa la altura de cada uno de los pequeño rectángulo, la anchura de cada rectángulo pequeño es 1. Los datos de prueba a 0 al final. Para cada línea de la salida de datos de prueba representa una respuesta entero.

entrada de la muestra:
7 2 1 4 5 1 3 3
4 1,000 1,000 1,000 1,000
0

Resultado de muestra:
8
4000

ideas:

  • La anchura aparente final de x altura = tamaño de rectángulo, una altura rectángulo es alta, la anchura de rectángulo se deja de encontrar un número de rectangular más corto que el primer rectángulo pasa su
  • De acuerdo con esta línea de pensamiento que realmente podemos usar la violencia contra cada rectángulo de tener a su alrededor para parecer más joven que él rectángulo, y luego calcular el ancho del paso, pero debido a la gran cantidad de datos dada ráfaga puede
  • A ambos lados estaban buscando más problemas, si pueden dispuestos primer rectángulo de baja a alta, entonces sólo es necesario calcular el número de su rectángulo de la derecha, se puede calcular el área rectangular actual. (No puede calcularse a causa de la baja ancho del rectángulo, puede llegar a ser tan unilateral de bilateral)
  • Así que se puede utilizar pila monótono de pensamiento, el establecimiento de una pila, la pila se almacena en el aumento de la altura del rectángulo. Con el fin de llegar al destino, a través de cada rectángulo histograma: Si la altura actual del rectángulo es más alta que la parte superior de la altura de la pila del rectángulo, entonces empujará la altura actual, de lo contrario pop pila.
  • Cuando la pila se calcula anchura valor acumulado, el tamaño de un rectángulo calculado y comparado las respuestas, lo que sea mayor de actualización de respuestas; entonces integrado en la altura y la anchura actual, para el empuje.
  • Después de atravesar toda la resultante American National Standard área rectangular es la más grande, la complejidad de tiempo de la pila monótona solamente O (n)
  • El primer tipo utiliza una pila de hecho directamente, entonces el TLE, se describe una matriz, int agregar una variable corresponde superior de la pila. Tenga en cuenta que el alcance de datos de esta cuestión, la American National Standard pila y requiere el uso de largo tiempo, es necesario comparar las variables en un tipo de datos unificados cuando se compara el máximo, puede convertir
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<stack>
using namespace std;
int main()
{
 int n;
 while(scanf("%d",&n)!=EOF&&n!=0)
 {
 int a[100011],w[100011];
 long long stack[100011];
 long long top=0;
 long long ans=0;
 memset(a,0,sizeof(a));
 for(int i=0;i<n;i++) scanf("%d",&a[i]);
 for(int i=0;i<=n;i++)
 {
  if(a[i]>stack[top])
  {
   stack[++top]=a[i];
   w[top]=1; 
  }
  else
  {
   int width=0;
   while(stack[top]>a[i])
   {
    width+=w[top];
    ans=max(ans,(long long)width*stack[top]);
    top--;
   }
   top++;
   stack[top]=a[i];
   w[top]=width+1;
  }
 }
 printf("%lld\n",ans);
 } 
 return 0;
 } 
Publicado 29 artículos originales · ganado elogios 1 · visitas 941

Supongo que te gusta

Origin blog.csdn.net/qq_44654498/article/details/104973739
Recomendado
Clasificación