Caso # | Resultado | Tiempo | Memoria |
---|---|---|---|
#1 |
Correcto
|
0.004 s | 7 KBi |
#2 |
Correcto
|
0.004 s | 72 KBi |
#3 |
Correcto
|
0.004 s | 2 KBi |
#4 |
Correcto
|
0.004 s | 71 KBi |
#5 |
Correcto
|
0.005 s | 1 KBi |
#6 |
Correcto
|
0.2 s | 6 KBi |
#7 |
Correcto
|
0.187 s | 7 KBi |
#8 |
Correcto
|
0.189 s | 7 KBi |
#9 |
Correcto
|
0.202 s | 6 KBi |
#10 |
Correcto
|
0.209 s | 74 KBi |
#include <bits/stdc++.h> using namespace std; int main() { int c, n, i, j, *alturas, num; scanf(" %d", &c); for (i = 0; i < c; i++) { // INPUT scanf("%d", &n); alturas = (int *)malloc(sizeof(int) * n); vector<int> res(n); stack<int> pila; for (j = 0; j < n; j++) { scanf(" %d", &alturas[j]); } printf("Case #%d: ", i + 1); // ALGORITMO for (j = n - 1; j >= 0; j--) { pila.push(alturas[j]); // revisamos si el edificio actual es menos alto que los edificios al horizonte while (pila.size() && alturas[j] >= pila.top()) { pila.pop(); } // El ultimo edificio nunca tiene quien le estorbe if (!pila.size()) { res[j] = -1; } // No es el ultimo edificio asi que quien le estorba es el edificio mas alto mas cercano else { res[j] = pila.top(); } pila.push(alturas[j]); } for (j = 0; j < n; j++) { printf("%d ", res[j]); } printf("\n"); free(alturas); } return 0; }