Найдите массив, полученный после добавления условий AP для запросов Q

Опубликовано: 22 Сентября, 2022

Дан массив A[] , состоящий из N целых чисел и Q запросов, скажем, Query[][] вида {L, R, a, d} , такой, что каждый запрос представляет бесконечную AP с первым членом как a и общей разностью d . Задача состоит в том, чтобы вывести обновленный массив после выполнения заданных запросов так, чтобы для каждого запроса {L, R, a, d} добавить значение (i – L + 1) -го члена арифметической прогрессии к A[i] для каждый индекс i в диапазоне [L, R] .

Примеры:

Input: A[]= {5, 4, 2, 8}, Q = 2, Query[][] = {{1, 2, 1, 3}, {1, 4, 4, 1}}
Output: 10 13 8 15
Explanation:
Following are the queries performed:
Query 1: The arithmetic progression is {1, 4, 7, …}. After adding the first term of the progression to index 1 and the second term of the progression to index 2, the array modifies to {6, 8, 2, 8}. 
Query 2: The arithmetic progression is {4, 5, 6, 7, 8, …}. After adding 4 to A[1], 5 to A[2], 6 to A[3] and 7 to A[4] the array modifies to {10, 13, 8 15}.
Therefore, the resultant array is {10, 13, 8 15}.

Input: A[] = {1, 2, 3, 4, 5}, Q = 3, Query[][] = {{1, 2, 1, 3}, {1, 3, 4, 1}, {1, 4, 1, 2}}
Output: 7 14 14 11 5

Подход: Данную проблему можно решить, перебирая диапазон [L, R] в каждой операции и добавляя соответствующий член данной арифметической прогрессии по каждому индексу i . Выполните следующие шаги, чтобы решить проблему:

  • Пройдите по массиву Query[][] с помощью переменной i и для каждого запроса {L, R, a, d} выполните следующие шаги:
    • Обходим массив A[], в диапазоне [L – 1, R – 1], используя переменную j
      • Добавьте значение a к значению A[j] .
      • Увеличьте значение a на d .
  • После выполнения вышеуказанных шагов выведите массив A[] в качестве результирующего обновленного массива.

Ниже приведена реализация вышеуказанного подхода:

Временная сложность: O(N*Q)
Вспомогательное пространство: O(1)