Двоичное дерево поиска(24 задач)
Дерево отрезков, RSQ, RMQ(90 задач)
Бор(14 задач)
Дерево Фенвика(6 задач)
Декартово дерево(10 задач)
Специальный терминал, разработанный в лаборатории, где работает Дима, представляет собой горизонтальный прямоугольник, состоящий из m×n ячеек, каждая из которых может содержать произвольное целое число. Ячейки занумерованы парами чисел, левая верхняя ячейка имеет номер (1, 1), правая нижняя – (\(m\), \(n\)).
Специальное устройство ввода, сконструированное специально для этого терминала, позволяет отправлять терминалу две команды: \(A\)(\(r\), \(c\), \(d\), \(v\)) и \(B\)(\(r_1\), \(c_1\), \(r_2\), \(c_2\), \(d\), \(v\)).
Рассмотрим сначала команду \(A\). Параметры \(r\) и \(c\) изменяются в пределах от 1 до \(m\) и от 1 до \(n\) соответственно и указывают, к какой ячейке применяется команда. Параметр \(d\) может принимать значение из множества {\(L\), \(R\), \(U\), \(D\)} и задает направление, в котором применяется команда: влево, вправо, вверх или вниз соответственно. Параметр \(v\) представляет собой целое неотрицательное число. В результате выполнения команды значения во всех ячейках, находящихся в направлении \(d\) от ячейки (\(r\), \(c\)), включая эту ячейку, увеличиваются на \(v\).
Например, если терминал имеет размер 5×4, то после выполнения команды \(A\)(3, 2, \(R\), 3) значения в ячейках (3, 2), (3, 3) и (3, 4) увеличатся на 3, а после команды \(A\)(2, 1, \(U\), 2) значения в ячейках (2, 1) и (1, 1) увеличатся на 2.
Рассмотрим теперь команду \(B\). Первые четыре ее параметра являются целыми числами и удовлетворяют условиям 1\( \le\) \(r_1\) \(\le\) \(r_2\) \(\le\) \(m\) и 1\( \le\) \(c_1\) \(\le\) \(c_2\) \(\le\) \(n\). Параметры \(d\) и \(v\) могут принимать те же значения, что и соответствующие параметры команды \(A\). Команда \(B\) выполняется следующим образом: для всех пар (\(r\), \(c\)), таких, что \(r_1\) \(\le\) \(r\) \(\le\) \(r_2\) и \(c_1\) \(\le\) \(c\) \(\le\) \(c_2\) выполняется команда \(A\)(\(r\), \(c\), \(d\), \(v\)).
Исходно все ячейки терминала содержат нули. Выведите содержимое терминала после выполнения заданной последовательности команд.
В первой строке вводятся числа \(m\) и \(n\), ( 1\( \le\)m, n\( \le\)200). В следующей строке задается число \(k\) – количество команд, которые следует обработать ( 0\( \le\)k\( \le\)40 000). Далее идут \(k\) строк, содержащих описания команд. Первый символ каждой строки задает тип команды, затем следует пробел и параметры команды, каждые два последовательных параметра разделены ровно одним пробелом. Параметр \(v\) каждой команды неотрицателен и не превышает 100.
Общее число команд \(A\), которое потребуется выполнить на терминале, включая команды, которые придется выполнить при выполнении команд \(B\), не превышает 5 * \(10^6\).
Выведите \(m\) строк по \(n\) чисел в каждой – содержимое терминала после выполнения указанной последовательности команд.
5 4 4 A 2 2 D 1 A 3 4 L 2 B 2 3 3 4 U 13 B 1 1 2 1 R 5
5 5 31 31 5 6 31 31 2 3 15 15 0 1 0 0 0 1 0 0
Сергей работает системным администратором в очень крупной компании. Естественно, в круг его обязанностей входит резервное копирование информации, хранящейся на различных серверах и «откат» к предыдущей версии в случае возникновения проблем.
В данный момент Сергей борется с проблемой недостатка места для хранения информации для восстановления. Он решил перенести часть информации на новые сервера. К сожалению, если что-то случится во время переноса, он не сможет произвести откат, поэтому процедура переноса должна быть тщательно спланирована.
На данный момент у Сергея хранятся \(n\) точек восстановления различных серверов, пронумерованных от 1 до \(n\). Точка восстановления с номером \(i\) позволяет произвести откат для сервера \(a_i\). Сергей решил разбить перенос на этапы, при этом на каждом этапе в случае возникновения проблем будут доступны точки восстановления с номерами \(l, l + 1, \ldots, r\) для некоторых \(l\) и \(r\).
Для того, чтобы спланировать перенос данных оптимальным образом, Сергею необходимо научиться отвечать на запросы: для заданного \(l\), при каком минимальном \(r\) в процессе переноса будут доступны точки восстановления не менее чем \(k\) различных серверов.
Помогите Сергею.
Первая строка входного файла содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 10^5\)), разделенные пробелами — количество точек восстановления и количество серверов. Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) — номера серверов, которым соответствуют точки восстановления (\(1 \le a_i \le m\)).
Третья строка входного файла содержит \(q\) — количество запросов, которые необходимо обработать (\(1 \le q \le 100\,000\)). В процессе обработки запросов необходимо поддерживать число \(p\), исходно оно равно 0. Каждый запрос задается парой чисел \(x_i\) и \(y_i\), используйте их для получения данных запроса следующим образом: \(l_i = \left((x_i + p) \bmod n\right) + 1\),
\(k_i = \left((y_i + p) \bmod m\right) + 1\) (\(1 \le l_i,x_i \le n\), \(1\le k_i, y_i \le m\)). Пусть ответ на \(i\)-й запрос равен \(r\). После выполнения этого запроса, следует присвоить \(p\) значение \(r\).
На каждый запрос выведите одно число — искомое минимальное \(r\), либо 0, если такого \(r\) не существует.
7 3 1 2 1 3 1 2 1 4 7 3 7 1 7 1 2 2
1 4 0 6