Автор: | А. Усманов | Ограничение времени: | 2 сек | |
Входной файл: | input.txt | Ограничение памяти: | 256 Мб | |
Выходной файл: | output.txt | |||
Максимальный балл: | 100 |
У Ильи имеется карта сокровищ размера H × W клеток.
Маленький брат Ильи — Никита, взял эту карту "поиграть". Игра заключалась в следующем: какое-то количество раз карта была сложена вдвое по вертикали или по горизонтали. Складывая карту по вертикали, Никита брал её за нижнюю сторону, по горизонтали — за правую сторону. После этого он соединял взятую сторону с противоположной стороной. При этом верхний левый угол карты всегда оставался неподвижным. Линия сгиба всегда проходила точно по границе между клетками. В итоге сложенная карта оказалось размером N × M клеток.
Но этого Никите было мало, он взял иглу и начал протыкать некоторые клетки насквозь, включая все слои, получившиеся в процессе складывания. Как только Илья увидел это, он немедленно остановил брата. Илья побоялся разворачивать карту, так как она может порваться.
Карта порвётся, если после разворачивания слишком много отверстий будут находиться рядом друг с другом. Требуется написать программу, которая определит, сколько отверстий находится в каждой из Q прямоугольных областей развёрнутой карты.
Первая строка входного файла содержит два целых числа H и W — высоту и ширину исходной карты.
Вторая строка входного файла содержит два целых числа N и M — высоту и ширину сложенной карты.
Далее следует N строк по M символов в каждой — описание карты. Символом 'X' (ASCII 88) отмечается клетка, которую проткнул Никита, символом '.' (ASCII 46) отмечается нетронутая клетка.
Далее следует строка, содержащая одно целое число Q — количество прямоугольных областей, интересующих Илью.
Далее в Q строках содержится по четыре числа в каждой. xi, yi, ui, vi — описание i-й прямоугольной области карты. xi, yi — координаты левого верхнего угла прямоугольника, ui, vi — координаты правого нижнего угла прямоугольника.
Нумерация клеток по вертикали сверху вниз с 1 до H, нумерация клеток по горизонтали слева направо с 1 до W.
Гарантируется, что свёрнутая карта получена из исходной путём преобразований, описанных в задаче. То есть существую такие целые числа a и b, что N × 2a = H и M × 2b = W.
Выходной файл должен содержать Q строк, каждая из которых содержит по одному целому числу. Число в строке номер i должно быть равно количеству отверстий, которые попали в i-ю прямоугольную область.
1 ≤ H, W ≤ 109
1 ≤ N, M ≤ 103
1 ≤ Q ≤ 105
1 ≤ xi ≤ ui ≤ H, 1 ≤ yi ≤ vi ≤ W
Баллы за каждую подзадачу начисляются только в случае, если все тесты этой подзадачи и необходимых подзадач успешно пройдены.
Подзадача | Баллы | Дополнительные ограничения | Необходимые подзадачи | ||
---|---|---|---|---|---|
H, W | xi, yi, ui, vi | Q | |||
1 | 12 | 1 ≤ H, W ≤ 103 | xi = ui, yi = vi | 1 ≤ Q ≤ 105 | |
2 | 8 | 1 ≤ H, W ≤ 103 | 1 ≤ Q ≤ 102 | ||
3 | 14 | 1 ≤ H, W ≤ 103 | 1 ≤ Q ≤ 105 | 1-2 | |
4 | 11 | 1 ≤ H, W ≤ 109 | xi = ui, yi = vi | 1 ≤ Q ≤ 105 | 1 |
5 | 9 | 1 ≤ H, W ≤ 109 | (ui − xi + 1)(vi − yi + 1) ≤ 106 | Q = 1 | |
6 | 16 | 1 ≤ H, W ≤ 109 | (ui − xi + 1)(vi − yi + 1) ≤ 106 | 1 ≤ Q ≤ 102 | 2, 5 |
7 | 17 | 1 ≤ H, W ≤ 109 | 1 ≤ Q ≤ 102 | 2, 5-6 | |
8 | 13 | 1 ≤ H, W ≤ 109 | 1 ≤ Q ≤ 105 | 1-7 |
По запросу сообщается результат окончательной проверки на каждом тесте.
№ | Входной файл (input.txt ) |
Выходной файл (output.txt ) |
---|---|---|
1 |
|
|
2 |
|
|
3 |
|
|
4 |
|
|
5 |
|
|
Подзадача | Дополнительные ограничения | Решение | ||
---|---|---|---|---|
H, W | xi, yi, ui, vi | Q | ||
1 | 1 ≤ H, W ≤ 103 | xi = ui, yi = vi | 1 ≤ Q ≤ 105 | O(H W + Q) Сгенерировать исходную карту |
2 | 1 ≤ H, W ≤ 103 | 1 ≤ Q ≤ 102 | O(H W + Q dx dy) Сгенерировать исходную карту и пройтись по прямоугольникам | |
3 | 1 ≤ H, W ≤ 103 | 1 ≤ Q ≤ 105 | O(H W + Q) Сгенерировать исходную карту + Частичные суммы | |
4 | 1 ≤ H, W ≤ 109 | xi = ui, yi = vi | 1 ≤ Q ≤ 105 | O(Q(log H + log W)) или O(Q) За логарифм или за единицу находить клетку |
5 | 1 ≤ H, W ≤ 109 | (ui − xi + 1)(vi − yi + 1) ≤ 106 | Q = 1 | O(dx dy(log H + log W)) или O(dx dy) Каждую клетку прямоугольника по отдельности за единицу или за логарифм |
6 | 1 ≤ H, W ≤ 109 | (ui − xi + 1)(vi − yi + 1) ≤ 106 | 1 ≤ Q ≤ 102 | O(Q dx dy) Каждую клетку прямоугольников по отдельности за единицу |
7 | 1 ≤ H, W ≤ 109 | 1 ≤ Q ≤ 102 | O(Q log H log W) Двумерное дерево отрезков + Формулы | |
8 | 1 ≤ H, W ≤ 109 | 1 ≤ Q ≤ 105 | O(Q) Формулы |