Иногда в олимпиадных задачах не хватает стека, и надо бы увеличить его размер. Есть много разных способов. Например, для MSVC действует такой:
#pragma comment(linker, "/STACK:16777216")Можно еще вручную выделить массив и переместить на него стек, используя ассемблер. Код ниже работает на GCC для amd64 (тестировался на GNU/Linux, хотя скорее всего будет работать и под Windows):
extern "C" {
void main2();
// размер стека — 16 МБ. Если нужно больше, можно
// поменять размер массива(но alignas не трогать!)
alignas(16) char stack[16777216];
}
void main2() {
// здесь основной код
}
int main() {
asm(
// сохраняем старые rsp и rbp
"pushq %rbp\n"
"movq %rsp, %rbp\n"
// перемещаем rsp на конец созданного
// нами массива; теперь он будет стеком
"leaq stack(%rip), %rsp\n"
"addq $16777216, %rsp\n"
// зовем main2() с основным кодом
"callq main2\n"
// возвращаем все на место
"movq %rbp, %rsp\n"
"popq %rbp"
);
return 0;
}