0416. Поксорим?

Input file name: queries.in
Output file name: queries.out
Time limit: 3 s
Memory limit: 256 megabytes

Богдан работает программистом в одной секретной фирме. В его обязанности входит обслуживание вычислительного устройства "TopSecret666". Это очень странное устройство. Оно имеет N ячеек памяти для хранения данных и M ячеек памяти для хранения команд на изменение данных. Ячейки данных имеют номера 1 …N. Ячейки команд имеют номера 1 …M. Данные – это набор из N целых чисел. Команды – это M троек целых чисел li, ri, xi. Каждая команда заключается в следующем: для каждой ячейки данных j, где j находится в промежутке между li и ri включительно, взять хранящееся в ней значение Aj и поместить в нее значение AJ \oplus xi. \oplus – исключающее или. Сначала в устройство заносятся данные, затем заполняются команды. Потом, на терминал устройства поступают запросы двух видов.

  1. задаётся отрезок в памяти команд с границами L и R включительно. Команды из этого отрезка отправляются на выполнение.
  2. задаётся отрезок в памяти данных с границами L и R включительно. Числа из этого отрезка суммируются и результат выводится на экран устройства.

По какой-то причине, программа обработки запросов перестала работать. Богдана попросили переписать её. Но у Богдана нет нужного количества свободного времени, а работу нужно выполнить в кратчайший срок. Поэтому он обратился к вам за помощью.

Формат входного файла

Первая строка содержит одно число N – количество ячеек памяти для хранения данных. 1 ≤ N ≤ 105. В следующей строке находятся N чисел Ai – начальные данные. 0 ≤ Ai ≤ 109. Следующая строка содержит число M – количество ячеек памяти для хранения команд. 1 ≤ M ≤ 103. Следующие M строк содержат по числа li, ri, xi – описания команд. 1 ≤ li, ri, ≤ M.0 ≤ xi ≤ 109. Далее следует число T – число запросов. Следующие T строк содержат по числа ti, Li, Ri – описание запросов. 1 ≤ t ≤ 2 – тип запроса. L, R – границы отрезка памяти. Гарантируется, что запросы не выходят за пределы соответствующей области памяти.

Так сложилось, что запросов второго типа поступило не более 50.

Формат выходного файла

Для каждого запроса второго типа выведите в новой строке результат выполнения запроса.

Пример:

queries.inqueries.out
5 1 3 3 5 5 2 1 2 1 4 5 1 10 2 1 5 2 3 3 1 1 2 2 1 2 1 1 1 2 4 5 2 1 5 1 1 1 1 1 2 2 1 5 17 3 2 8 15 17



Discuss       Submit a solution



Printable version