Я занимался проблемой Codeforces, когда обнаружил ошибку, которую, собственно, не знаю, как исправить:
Проблема:
Вася придумал новую функцию ha sh массива. Он рассчитывается следующим образом. Хотя в массиве есть как минимум два элемента, первые два элемента, назовите их ?1 и ?2, удаляются, а новый элемент ?2-?1 вставляется в начало массива. Когда в массиве всего один элемент, это число является значением функции Васи ha sh этого массива.
У Васи есть массив ?1, ?2, ..., ??. Он выполняет ? операций следующего вида: «увеличить все элементы отрезка [??, ??] на ??». После каждой операции он хочет узнать значение функции Васи ha sh этого массива.
Входные данные: Первая строка содержит целое число ? (1≤?≤500000) - размер массива. Во второй строке записаны ? целых чисел ?? (−109≤??≤109) - элементы массива. В третьей строке записано целое число ? (1≤?≤200000) - количество операций. В каждой из следующих ? строк записано три целых числа ??, ??, ?? (1≤??≤??≤?, −109≤??≤109) - параметры ?-й операции.
Вывод: Вывод линий. В ?-й строке выведите одно целое число - значение функции Васи ha sh после ?-й операции.
При изменении массива (как внутри, так и вне while l oop) автоматически изменяется и весь остальной массив.
Я действительно не знаю, что попробовать и как это исправить.
function hash(n, inputArray, q, operations){
let result = [];
for (const operation of operations) {
let new_array = array_operation(inputArray, operation[0], operation[1], operation[2]);
while (new_array.length >= 2) {
let new_value = new_array.shift() + new_array.shift();
new_array.unshift(new_value);
}
result.push(new_array.shift());
}
return result;
}
function array_operation(array, start, end, value){
for (const i in array) if (i >= --start && i < end) array[i] += value;
return array;
}
console.log(hash(7, [4, 2, -5, 10, 4, -2, 6], 2, [[2, 4, -8,], [5, 7, 2], [3, 3, -1], [3, 7, 3]]));