Школа программиста

Забыли пароль?
[задачи] [курсы] [олимпиады] [регистрация]
Логин:   Пароль:    
Скрыть меню
О школе
Правила
Олимпиады
Фотоальбом
Гостевая
Форум
Архив олимпиад
Архив задач
Состояние системы
Рейтинг
Курсы
Новичкам
Работа в системе
Алгоритмы
Курсы ККДП
Дистрибутивы
Ссылки

HotLog


 

Автоматизация склада

(Время: 3 сек. Память: 64 Мб Сложность: 77%)

Компания занимается автоматизацией склада. На складе хранятся n видов товаров, пронумерованных от 1 до n, каждый вид товара хранится в своём помещении. Товар вида i хранится в помещении с номером i.

Специальный робот обслуживает запросы по получению товаров со склада. Для доступа в помещения склада робот использует специальные электронные карты. Карты у робота хранятся в специальном отсеке, из которого он может вынуть верхнюю карту. Вынутую карту робот может вернуть в отсек на любое место: на верхнюю позицию, между любыми двумя картами или на самую нижнюю позицию.

Чтобы открыть помещение, робот действует следующим образом. Он вынимает карты из отсека для их хранения и возвращает их обратно в отсек, пока на верхней позиции не окажется карта от помещения, которое ему необходимо открыть. После этого, вынув эту карту, робот использует её, чтобы открыть помещение, и затем также возвращает в отсек для хранения карт. Если суммарно роботу потребовалось вынуть из отсека x карт, включая ту, которой он в итоге открыл помещение, будем говорить, что для открытия помещения робот совершил x действий.

В начале рабочего дня роботу поступил заказ на выдачу m товаров: a1, a2, ... , am. Робот должен выдать товары именно в этом порядке. Для этого он последовательно выполняет следующие действия: открывает помещение, в котором лежит очередной товар, берет товар, закрывает помещение и выдаёт товар клиенту. После этого робот переходит к выдаче следующего товара.

Исходно электронные карты лежат в отсеке в следующем порядке, от верхней к нижней: b1, b2, ... , bn. Для каждого помещения в отсеке лежит ровно одна карта.

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

Требуется написать программу, которая по заданным целым числам n и m, последовательности выдаваемых товаров a1, a2, ... , am и начальному положению карт в отсеке для хранения b1, b2, ... , bn определяет, какое минимальное количество действий придется совершить роботу, чтобы открыть все помещения в необходимом порядке. Для каждой вынутой карты необходимо также указать позицию, на которую её необходимо вернуть, чтобы добиться оптимального количества действий.

Входные данные

Первая строка входного файла INPUT.TXT содержит два целых числа n и m (1 ⩽ n, m ⩽ 3×105) — количество видов товаров и количество товаров, которые необходимо выдать со склада.

Вторая строка содержит m целых чисел a1, a2, ... , am (1 ⩽ ai ⩽ n) — типы товаров, которые необходимо выдать со склада, перечисленные в том порядке, в котором это необходимо сделать.

Третья строка содержит n различных целых чисел b1, b2, ... , bn (1 ⩽ bi ⩽ n) — порядок, в котором карты исходно находятся в отсеке для их хранения, перечисленные от верхней к нижней.

Выходные данные

Первая строка выходного файла OUTPUT.TXT должна содержать число k — минимальное количество действий, которое потребуется совершить роботу, чтобы выдать товары в заданном порядке.

Далее выведите k чисел. Для каждого действия робота выведите одно число: позицию, на которую ему следует вернуть вынутую карту в отсек для хранения. Если карта возвращается на самую верхнюю позицию, следует вывести 1, если после одной карты, 2, и так далее, для последней позиции следует вывести n.

Если существует несколько способов минимизировать суммарное число действий, выведите любой из них.

Примеры

INPUT.TXTOUTPUT.TXT
11 1
1
1
1
1
24 5
4 1 2 4 4
4 3 2 1
7
4 4 2 4 4 1 4
32 2
1 2
2 1
3
2 2 2

Пояснения к примерам

Во втором примере карты в отсеке робота перемещаются следующим образом:

ДействиеПеред действиемИзвлеченная картаОткрытое помещениеПозиция, куда помещается картаПосле действия
14, 3, 2, 14443, 2, 1, 4
23, 2, 1, 4342, 1, 4, 3
32, 1, 4, 3221, 2, 4, 3
41, 2, 4, 31142, 4, 3, 1
52, 4, 3, 12244, 3, 1, 2
64, 3, 1, 24414, 3, 1, 2
74, 3, 1, 24443, 1, 2, 4

Для отправки решения задачи необходимо зарегистрироваться и авторизоваться!

 Язык программирования C++
 Решение олимпиадных задач
 Региональные олимпиады
 Книги Фёдора Меньшикова
 Тренировочные олимпиады
 Школьный этап
 Муниципальный этап
 Региональный этап
 Полуфинал ВКОШП
 Личное первенство СФУ
 2006 / 2007
 2007 / 2008
 2008 / 2009
 2009 / 2010
 2010 / 2011
 2011 / 2012
 2012 / 2013
 2013 / 2014
 2014 / 2015
 2015 / 2016
 2016 / 2017
 2017 / 2018
 2018 / 2019
 2019 / 2020
 A. Два измерения
 B. Полные квадраты
 C. Автоматизация склада
 D. Машинное обучение
 E. Неисправный марсоход
 F. Интервальные тренировки
 G. Экспедиция
 H. Разбиение на пары

Красноярский краевой Дворец пионеров, (c)2006 - 2020, E-mail: admin@acmp.ru