Кошелёк
시간 제한2초메모리 제한1024 MB
정렬된 지폐 목록에 삽입을 반복하면서, 각 삽입 직전에 양끝에서 꺼내야 하는 최소 연산 수를 구한다.
문제
Рик превратил себя в кошелёк! Бум! Что вы на это скажете? Вот так поворот! Рик --- кошелёк. Что вы на это скажете? Этого не происходило ещё никогда. Рик превратил себя в кошелёк! {\slshape КОШЕЛЁК-РИК!}
Так как Рик теперь не может двигаться, Морти вынужден помогать ему с обратным превращением. Для этого нужно правильным образом добавить в кошелёк несколько купюр. Всего есть типов купюр, пронумерованных числами от 1 до так, что чем больше номер купюры, тем больше ее номинал. В кошельке уже лежит некоторая сумма денег: для каждого от до в кошельке уже лежит купюр этого вида. Более того, купюры лежат там в ряд и отсортированы по номиналу, то есть если в кошельке лежат две купюры типов и , где , то купюра типа расположена левее купюры типа . Это свойство должно сохраняться в каждый момент: по словам Рика, если его нарушить, последствия будут непредсказуемы!
Благо у Морти есть две изначально пустые стопки и , в которые он в процесс своих действий может класть купюры.
Кошелёк поддерживает 4 вида операций:
- Вынуть из кошелька самую левую купюру и положить её с правого края стопки .
- Вынуть из кошелька самую правую купюру и положить её с левого края стопки .
- Вставить с левого края кошелька новую купюру.
- Вставить с правого края кошелька новую купюру.
После каждой операции третьего или четвёртого типа необходимо тут же возвратить все вынутые купюры в кошелёк, а именно --- все купюры стопки , не меняя их расположения, поместить в левый край кошелька, а --- в правый край. В самом начале стопки и пустые.
Чтобы превратить Рика из кошелька назад в человека, Морти должен по очереди поместить в кошелёк новых купюр, -я добавленная купюра должна быть типа . Купюры должны быть добавлены операциями 3-го и 4-го видов. После каждой операции купюры должны оставаться отсортированными по номиналу слева направо. Рик и Морти, чтобы понять, сколько времени у них займёт этот процесс, обратились к вам за помощью. Напишите программу, которая определит, какое наименьшее число операций первого и второго типов потребуется непосредственно перед каждым добавлением очередной купюры.
입력
Первая строка входных данных содержит число --- количество различных типов купюр ().
Вторая строчка содержит целых числел --- изначальное количество купюр каждого типа, которые лежат в кошельке ().
В третьей строке находится число --- количество купюр, которые надо добавить в кошелёк, чтобы Рик обратно превратился в человека ().
В последней строке входных данных находится чисел --- типы купюр, которые надо добавить в кошелёк, что бы Рик снова стал человеком ().
출력
В первой строке выходных данных выведите через пробел количество операций первого и второго типа, которое надо будет совершить перед каждым добавлением очередной купюры в кошелёк.
힌트
Будем изображать текущее положение в формате , где --- последовательность купюр, лежащих в кошельке.
В первом тесте в самом начале ситуация выглядит как , после чего осуществляется 5 действий:
- Чтобы добавить купюру типа 2, надо с любой из сторон дважды взять купюру, потом с той же стороны засунуть купюру типа 2.
- В добавить купюру типа 1 можно, просто засунув эту купюру с левой стороны. \item Из быстрее всего вынуть два раза купюру справа, получить и добавить справа купюру типа 2.
- В сразу добавляем справа купюру типа 3.
- Нет разницы, с какой стороны в три раза вынуть купюру. Например, слева: получим и добавим слева купюру типа 2, получив финальную ситуацию .