Брутфорс решение здесь не сработает из-за заданного временного ограничения.
По этой причине вы получите ошибку тайм-аута.
Так что вам нужно оптимизировать свой код, что можно сделать с помощью массива префиксных сумм.
вместо добавления k ко всем элементам в диапазоне от a до b в массиве, накапливаем массив разностей
Всякий раз, когда мы добавляем что-либо по любому индексу в массив и применяем алгоритм суммирования префиксов, один и тот же элемент будет добавляться к каждому элементу до конца массива.
ex- n = 5, m = 1, a = 2 b = 5 k = 5
i 0.....1.....2.....3.....4.....5.....6 //take array of size N+2 to avoid index out of bound
A[i] 0 0 0 0 0 0 0
Добавьте k = 5 к a = 2
A [a] = A [a] + k // начальный индекс, откуда следует добавить элемент k
i 0.....1.....2.....3.....4.....5.....6
A[i] 0 0 5 0 0 0 0
теперь применяется алгоритм суммирования префиксов
i 0.....1.....2.....3.....4.....5.....6
A[i] 0 0 5 5 5 5 5
так что вы можете видеть добавление K = 5 ко всем элементам до конца после применения префиксной суммы, но нам не нужно добавлять k до конца. поэтому, чтобы свести на нет этот эффект, мы должны добавить -K также после индекса b + 1, чтобы только из диапазона [a, b] был добавлен эффект добавления элемента K.
A [b + 1] = A [b] -k //, чтобы удалить эффект ранее добавленного элемента k после b-го индекса.
вот почему добавление -k в исходный массив вместе с + k.
i 0.....1.....2.....3.....4.....5.....6
A[i] 0 0 5 0 0 0 -5
Теперь примените префикс sum Array
i 0.....1.....2.....3.....4.....5.....6
A[i] 0 0 5 5 5 5 0
Теперь вы можете видеть, что K = 5 добавлено из a = 2 в b = 5, что и ожидалось.
Здесь мы обновляем только два индекса для каждого запроса, поэтому сложность будет O (1).
Теперь примените тот же алгоритм для ввода
# 0.....1.....2.....3.....4.....5.....6 //taken array of size N+2 to avoid index out of bound
5 3 # 0 0 0 0 0 0 0
1 2 100 # 0 100 0 -100 0 0 0
2 5 100 # 0 100 100 -100 0 0 -100
3 4 100 # 0 100 100 0 0 -100 -100
Чтобы вычислить максимальную сумму префикса, накапливайте массив разностей до ?, принимая максимальный накопленный префикс.
После выполнения всех операций теперь примените префикс sum Array
i 0.....1.....2.....3.....4.....5.....6
A[i] 0 100 200 200 200 100 0
Теперь вы можете пройти через этот массив, чтобы найти максимум, равный 200.
обход массива займет O (N) времени, а обновление двух индексов для каждого запроса займет O (1) * количество запросов (м)
общая сложность = O (N) + O (M)
= O (N + M)
это означает = (10 ^ 7 + 10 ^ 5), что меньше 10 ^ 8 (в секунду)
Примечание: Если вы ищете видеоурок , вы должны проверить его здесь для подробного объяснения .