A. QSort

Для сортировки последовательности чисел широко используется быстрая сортировка - QSort. Ниже приведена программа, которая сортирует массив a, используя данный алгоритм.

var a : array [1..N] of integer;

procedure QSort(left, right : integer);
var m, i, j, t : integer;
begin
  m := a[(left+right) div 2];
  i := left; j := right;
  repeat
    while a[i] < m do inc(i); {первый while}
    while a[j] > m do dec(j); {второй while}
    if i <= j then
    begin
      t := a[i]; a[i] := a[j]; a[j] := t;
      inc(i); dec(j);
    end;
  until i > j;

  if j > left then QSort(left, j);
  if i < right then QSort(i, right);
end;

begin
  ...
  QSort(1, N);
end.
Хотя QSort является самой быстрой сортировкой в среднем, существуют тесты, на которых она работает очень долго. Будем оценивать время работы алгоритма количеством сравнений, сделанных с элементами массива (т.е. суммарным количеством сравнений в первой и втором while). Требуется написать программу, генерирующую тест, на котором быстрая сортировка сделает наибольшее число таких сравнений.

Входные данные
Во входном файле задано число N (1≤N≤700000).

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

Пример входного и выходного файлов
INPUT.TXT OUTPUT.TXT
3 1 3 2

B. Банкиры

N банкиров собираются в ресторан на торжественный банкет. i-ый банкир приходит во время Ti и имеет важность Pi. Дверь в ресторан может находиться в одном из K+1 состояний открытости, которые выражаются числами [0,K]. Состояние открытости может изменяться не более, чем на единицу за единицу времени, т.е. дверь либо закрывается на 1, либо открывается на 1, либо остаётся в прежнем положении. В начальный момент времени дверь закрыта (состояние 0). i-ый банкир входит в ресторан, только если дверь открыта специально для него, т.е. состояние открытости совпадает с тучностью банкира Si. Если же к моменту его прихода это условие не выполняется, то банкир уходит и никогда больше не возвращается.
Ресторан работает в интервале времени [0,T].

Вашей целью является собрать в ресторане банкиров с максимальной суммарной важностью, открывая и закрывая дверь соответствующим образом.

Входные данные
Первая строка входного файла содержит натуральные числа N, K и T. (1≤N≤100, 1≤K≤100, 0≤T≤30000).
Вторая строка содержит моменты времени Ti, в которые банкиры приходят в ресторан. (0≤TiT, i=1,2,...,N).
Третья строка содержит значения важности банкиров Pi (0≤Pi≤300, i=1,2,...,N).
Четвёртая строка содержит значения тучности банкиров Si (1≤SiK, i=1,2,...,N)

Выходные данные
В выходной файл вывести одно число - максимальную сумму важностей.

Пример входного и выходного файлов
INPUT.TXT OUTPUT.TXT
4 10 20	
10 16 8 16	
10 11 15 1	
10 7 1 8	
  
26

C. Дефрагментация

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

Все файлы перенумерованы натуральными числами от 1 до K в порядке убывания частоты обращения. Так как считывание с начала диска выполняется быстрее, чем считывание с конца, оптимальным является расположение, при котором файл номер 1 занимает кластеры 1..S1, файл номер 2 - кластеры S1+1,.., S1+ S2 и т.д. (здесь Si - это число кластеров, занимаемое i-ым файлом).

Для того, чтобы расположить файлы оптимальным образом, производятся операции перемещения кластеров. Каждая такая операция заключается в чтении одного занятого кластера с диска в память и переписывание его содержимого в какой-либо свободный кластер. После этого первый кластер объявляется свободным, а второй - занятым.

Вашей целью является расположить файлы на диске оптимальным образом, сделав минимальное количество операций перемещения кластеров.

Входные данные
Первая строка входного файла содержит числа N и K (1≤K<N≤10000).
В i+1 строке (1≤iK) находится описание i-го файла. Первым числом в строке является Si (1≤SiN) - число кластеров в файле, далее следуют Si чисел, которые являются номерами кластеров по порядку, в которых расположен файл.
Номера всех кластеров во входных данных различны, и на диске есть хотя бы один свободный кластер.

Входные данные
Последовательность операций перемещений кластеров. Каждая операция задаётся парой чисел P и Q, где данные перемещаются с кластера P в кластер Q.

Пример входного и выходного файлов
INPUT.TXT OUTPUT.TXT
20 3
4 2 3 11 12
1 7
3 18 5 10
  
2 1
3 2
11 3
12 4
18 6
10 8
5 20
7 5
20 7