#include <algorithm>
#include <iostream>

int main( ) {
   int cap = 1, tam = 0;
   int* p = new int[cap];

   for (;;) {
      std::cout << "Elige una opcion:\n";
      std::cout << "1. Agregar un elemento.\n";
      std::cout << "2. Quitar el ultimo elemento.\n";
      std::cout << "3. Ver el arreglo.\n";
      std::cout << "4. Salir.\n";

      int opcion;
      std::cin >> opcion;

      if (opcion == 1) {
         if (tam == cap) {
            int* q = new int[2 * cap];
            for (int i = 0; i < tam; ++i) {
               q[i] = p[i];
            }
            delete[] p;
            p = q;
            cap *= 2;
         }

         std::cout << "Dame el valor del elemento: ";
         int valor;
         std::cin >> valor;
         p[tam] = valor;
         tam += 1;
      } else if (opcion == 2) {
         if (tam == 0) {
            std::cout << "Error: el arreglo esta vacio.\n";
         } else {
            tam -= 1;
         }
      } else if (opcion == 3) {
         for (int i = 0; i < tam; ++i) {
            std::cout << p[i] << " ";
         }
         std::cout << "\n";
      } else if (opcion == 4) {
         break;
      } else {
         std::cout << "Opcion incorrecta.\n";
      }
      
      std::cout << "\n";
   }

   delete[] p;
}
