HackerRank - grande-rectángulo

portal

El significado de los problemas

Proporciona a los edificios de N adyacente, cada edificio tiene una cierta altura, la anchura son 1, la mayor existen cálculo de área rectangular.

 

pensamiento

La altura de cada rectángulo se puede utilizar como la construcción de alto, con L [i] y R ^ [i] en el i-ésimo registro de la construcción de la más a la izquierda y más a la derecha cubre la gama rectangular que puede ser extendido a un alto.

 

código

1 #include <iostream>
 2 #include <cstdio>
 3 #include <cola>
 4  usando  espacio de nombres std;
5  const  int maxN = 100000 + 5 ;
6  
7  int un [maxN], l [maxN], r [maxN];
8  
9  struct nodo {
 10      int valor, pos;
11      bool  operador <( const nodo y rhs) const {
 12          de retorno valor < rhs.value;
13      }
 14  };
15  
16  int main () {
 17      // freopen ( "in.txt", "r", la entrada estándar); 
18      int n;
19      , mientras que (~ scanf ( " % d " , y n)) {
 20          para ( int i = 0 ; i <n; i ++) scanf ( " % d " , & a [i]);
21  
22          priority_queue <nodo> q;
23          para ( int i = 0 ; i <n; i ++ ) {
 24              mientras que (! Q.empty ()) {
 25                 nodo s = q.top ();
26                  Si (s.value> a [i]) {
 27                      r [S.POS] = i- 1 ;
28                      q.pop ();
29                  }
 30                  más  si (s.value <= a [i]) {
 31                      descanso ;
32                  }
 33              }
 34              nodo s;
35              s.value = a [i];
36              S.POS = i;
37              q.push (s);
38          }
 39         mientras que (! q.empty ()) {
 40              nodo s = q.top ();
41              q.pop ();
42              r [S.POS] = n- 1 ;
43          }
 44  
45          para ( int i = n- 1 ; i> = 0 ; i-- ) {
 46              mientras que (! {Q.empty ())
 47                  de nodo s = q.top ();
48                  Si (s.value> a [i]) {
 49                      l [S.POS] = i + 1 ;
50                      q.pop ();
51                 }
 52                  más  si (s.value <= a [i]) {
 53                      descanso ;
54                  }
 55              }
 56              nodo s;
57              s.value = a [i];
58              S.POS = i;
59              q.push (s);
60          }
 61          mientras que (! Q.empty ()) {
 62              nodo s = q.top ();
63              q.pop ();
64              l [S.POS] = 0 ;
65          }
 66 
67          int res = - 1 ;
68          para ( int i = 0 ; i <n; i ++ ) {
 69              res = max (res, a [i] * (r [i] -l [i] + 1 ));
70          }
 71          printf ( " % d \ n " , res);
72      }
 73      de retorno  0 ;
74 }

 

Supongo que te gusta

Origin www.cnblogs.com/zyb993963526/p/12654296.html
Recomendado
Clasificación