переполнение стека 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");
}
похоже, алгоритм работает правильно, но единственной проблемой является стек. большое спасибо!