Сума квадратів на дереві відрізків#3984

Сума квадратів на дереві відрізків

1 секунда
122,174 мегабайта
Дуже легка

Дерева відрізків — надзвичайно корисна структура даних. Наприклад, використовуючи ліниве просування (lazy propagation), можна ефективно виконувати операції: обчислення суми на відрізку за O(\log n) та оновлення на відрізку за O(\log n).

У цій задачі вам потрібно обчислювати суму квадратів на заданому відрізку, при цьому підтримуючи два типи модифікацій:

Вхідні дані

Перша стрічка містить кількість тестів.

Перша стрічка кожного тесту містить два цілі числа n~(1 \le n \le 10^5) та q~(1 \le q \le 10^5).

Наступна стрічка містить цілих чисел, кожне з яких по модулю не перевищує . Далі йдуть стрічок, кожна з яких описує одну операцію:

  • — виведіть суму квадратів елементів з індексами від до nd~(1 \le st \le nd \le n) включно,

  • 1~st~nd~x — додати значення до всіх елементів відрізка [st, nd]~(1 \le st \le nd \le n, -1000 \le x \le 1000),

  • 0~st~nd~x — присвоїти значення всім елементам відрізка [st, nd]~(1 \le st \le nd \le n, −1000 \le x \le 1000).

Вихідні дані

Для кожного тесту в першій стрічці виведіть "Case <caseno>:". Потім для кожної операції типу виведіть значення суми квадратів на відповідному відрізку.

Щоб уникнути переповнення, використовуйте -бітний знаковий цілочисельний тип даних.

Приклади

Приклад 1

Loading
Loading