переполнение стека c ++

Итак, я пытаюсь решить задачу. У меня уже есть код, но системные выходы, «переполнение стека» Я новичок в C ++, и мой английский не очень хорош, поэтому я прошу прощения за недопонимание =)

   #include <iostream> 

using namespace std;

int main (){
    int n;
    int x;
    int k = 0; // счетчик для рабочего массива
    int a [200000];
 scanf("%d\n",&n);   

 for (int i = 0; i< n; ++i){
     std::cin >> x;
     if (x > 0){
             k++;
             a[k] = x;
           }else if(x == 0){
                 for (int q = 1; q <= k; ++q){ // копирование 
                          a[k+q] = a[q];
                     }
                 k *= 2;
                 }else{
                          printf("%d %d\n",a[k],k);
                          k--;
                        }
     }
     system("pause");


}

похоже, алгоритм работает правильно, но единственной проблемой является стек. большое спасибо!

Ответы на вопрос(3)

Ваш ответ на вопрос