Спершу позбудемось ділення. Умова \mathrm{avg}(S) \le C для відрізка рівносильна
Тому одразу замінимо масив на b_i = a_i - C: тепер треба з'ясувати, чи існує відрізок довжини щонайменше із недодатною сумою.
Через префіксні суми це формулюється так: чи існує r \ge L, для якого
Перевірка робиться одним проходом за : рухаємо і підтримуємо максимум префіксних сум із затримкою на позицій.
Тепер найважливіше спостереження цієї задачі. За умовою x \ge 0, тобто кожен запит лише зменшує елементи масиву. Отже, середнє значення будь-якого відрізка з часом лише спадає, і якщо гарний відрізок одного разу з'явився, він уже нікуди не подінеться. Іншими словами, послідовність відповідей має вигляд «кілька NO, а далі самі YES» — вона монотонна.
Це дозволяє не перераховувати відповідь після кожного запиту, а знайти двійковим пошуком перший запит, після якого відповідь стає YES.
Для фіксованого стан масиву після перших запитів будується за \mathcal{O}(n + t): усі віднімання на відрізках накопичуємо в різницевому масиві й один раз розгортаємо префіксною сумою. Далі виконуємо описану вище перевірку за .
Загальна складність — \mathcal{O}((n + q)\log q), що з запасом вкладається в обмеження.
Стежте за типами: сума сягає 2 \cdot 10^5 \cdot (10^9 + 2 \cdot 10^5 \cdot 10^7), тому обов'язково 64-бітний тип, а краще перевірити оцінку й за потреби взяти ширший.