Written by Anonymous
#include<stdio.h>
#define _max_ 1001
typedef struct
{
int vetor[_max_];
int iTopo;
}TPilha;
//Inicializar uma Pilha:
void inicializarPilha(TPilha *P) //usando * para passar a referencia
{
(*P).iTopo = -1;
}
//Finalizar a Pilha: Garante que a pilha termine sempre "vazia"
void finalizarPilha(TPilha *P)
{
(*P).iTopo = -1;
}
//Vazia: Informar se a pilha está vazia ou não
int vazia(TPilha P)
{
return P.iTopo == -1; // Se a iTopo for = -1, é true e retornará o valor 1, logo a pilha estará vazia, caso contrário retornara 0.
}
//Cheia: Informa se a pilha está com seu valor máximo ou não.
int cheia(TPilha P)
{
return P.iTopo == _max_ - 1; //Msm caso do exemplo acima, porém agora o valor a ser comparado é: Max - 1 = 99.
}
//Topo: Informa o valor que está no topo da pilha.
float topo(TPilha P)
{
return P.vetor[P.iTopo];
}
//Inserir: Insere um valor n pilha.
void inserir(TPilha *P, int valor)
{
if(cheia(*P))
{
}
else
{
(*P).iTopo++;
(*P).vetor[(*P).iTopo] = valor;
}
}
//Remover: Remove o elemento que corresponde ao topo da pilha.
void remover(TPilha *P)
{
if(vazia(*P))
{
}
else
{
(*P).iTopo--;
}
}
int main(){
TPilha A, estacao, B;
int quantidadeDeTrens, n, i, maior = 0, topoA, topoEstacao;
while(1){
scanf("%i", &quantidadeDeTrens);
if(quantidadeDeTrens == 0){
printf("\n");
break;
}
while(1){
inicializarPilha(&A);
inicializarPilha(&estacao);
inicializarPilha(&B);
scanf("%i", &n);
if(n == 0){
printf("\n");
break;
}else{
inserir(&A, n);
if( n > maior)
maior = n;
}
for(i=0; i < quantidadeDeTrens - 1;i++){
scanf("%i", &n);
inserir(&A, n);
if( n > maior)
maior = n;
}
while(vazia(A) == 0 || (topo(estacao) == maior) ){
if(vazia(A)){
topoA = 0;
}else{
topoA = topo(A);
}
if(vazia(estacao)){
topoEstacao = 0;
}else{
topoEstacao = topo(estacao);
}
if(topoA == maior){
inserir(&B, topoA);
remover(&A);
maior--;
}else if(topoEstacao == maior ){
inserir(&B, topoEstacao);
remover(&estacao);
maior--;
}else {
inserir(&estacao, topoA);
remover(&A);
}
}
if(vazia(A) == 1 && vazia(estacao) == 1){
printf("Yes\n");
}else{
printf("No\n");
}
finalizarPilha(&A);
finalizarPilha(&estacao);
finalizarPilha(&B);
}
}
return 0;
}