На вводе n и a_i-х выдаётся ошибка out of range, ч...

Creato il: 24 ottobre 2026

Risposto usando GPT-5.6 Thinking da Chat01

Domanda

image.png

На вводе n и a_i-х выдаётся ошибка out of range, что может быть не так?

Pensiero

Worked for a few seconds

Risposta

Проблема у тебя в функции derevo() — в базовом случае не хватает return.

Сейчас:

cpp
if (i == j) { d[v] = a[i]; } int mid = (i + j) / 2; derevo(v * 2, i, mid); derevo(v * 2 + 1, mid + 1, j);

Когда i == j, ты записываешь d[v] = a[i], но функция продолжает выполняться. Например, если i = j = 0, то:

cpp
mid = 0; derevo(v * 2, 0, 0);

и это повторяется снова и снова: v → 2v → 4v → 8v.... В какой-то момент обращение к d[v] выходит за границы вектора.

Исправь так:

cpp
void derevo(int v, int i, int j) { if (i == j) { d[v] = a[i]; return; } int mid = (i + j) / 2; derevo(v * 2, i, mid); derevo(v * 2 + 1, mid + 1, j); d[v] = d[v * 2] + d[v * 2 + 1]; }

Либо через else.

Ещё стоит проверить n == 0, потому что тогда:

cpp
derevo(1, 0, n - 1);

превратится в derevo(1, 0, -1). Если по условию n >= 1, это не проблема.

Главная ошибка на скрине — отсутствие return после if (i == j).

Condividi questa Q&A