Usando pilhas de um jeito um pouquinho diferente...
Descrição
Solução
A ideia daqui é utilizar uma pilha que em vez de guardar os elementos à medida que você os coloca e deixar para calcular o mínimo quando precisar, é melhor ir colocando na pilha direto o mínimo entre todos os números da pilha. Como fazer isso? As operações se transformam em:
PUSH: em vez de colocar o elemento na pilha, vê se o elemento é menor que o elemento do topo. Se for, coloca o elemento mesmo, senão repete o elemento do topo. É importante repetir o elemento em vez de só ignorar porque é como se você estivesse registrando que o menor elemento continua sendo esse e manter a quantidade correta de elementos para o POP não dar ruim.
POP: funciona exatamente da mesma forma de uma pilha normal.
MIN: olha o topo da pilha, que você já assegurou que é o elemento mínimo da pilha até o momento.
#include<stdio.h>int minimos[1000000];intmain(){char operacao[4];int N, V, minimo, p; p =-1;scanf("%d\n",&N);for(int i =0; i < N; ++i){scanf("%s",&operacao);if(!memcmp(operacao,"PUSH",4)){scanf("%d\n",&V);if(p ==-1){ minimo = V; }else{ minimo = (minimos[p] < V ? minimos[p] : V); } minimos[++p] = minimo; }elseif(!memcmp(operacao,"POP",3)){if(p ==-1){printf("EMPTY\n"); }else{--p; } }else{if(p ==-1){printf("EMPTY\n"); }else{printf("%d\n", minimos[p]); } } }return0;}