Алгоритмы сортировки

314 задачвместе с подтемами
Число у задачи — рейтинг сложности, слово рядом — насколько она трудна по сравнению с другими задачами такого же типа. Шкалы задач с ответом и задач с кодом между собой не сравниваются. Рядом — счётчики попыток: успешные, неуспешные.
Фермер Джон пытается отсортировать свои \(N\) коров (\(1 \leq N \leq 100\)), последовательно пронумерованных \(1 \dots N\).

В настоящий момент коровы выстроились в линию в порядке \(p_1, p_2, p_3, \dots, p_N\), и ФД стоит перед коровой \(p_1\). Он хочет переупорядочить коров так, чтобы они стали в порядке \(1, 2, 3, \dots, N\), с коровой \(1\) перед ФД.

Фермера Джона слышит только корова, которая стоит перед ним. В этот момент ФД может сказать ей перейти на \(k\) позиций назад (\(k\) в интервале \(1 \ldots N-1\).). \(k\) коров, которых она проходит , двигаются вперёд, освобождая место для неё, в которое она и становится.

Например, пусть \(N=4\) и коровы стоят в таком порядке

 ФД: 4, 3, 2, 1 

Единственная корова, которая слышит ФД, это корова \(4\). Если он скажет ей сдвинуться на 2 позиции, порядок станет таким:

 ФД: 3, 2, 4, 1 

Теперь ФД слышит только корова \(3\). Теперь ей можно давать инструкцию и т.д.

Определите минимальное количество инструкций, которые должен дать ФД, чтобы отсортировать всех коров.

ФОРМАТ ВВОДА (файл sleepy.in):

Первая строка ввода содержит \(N\).

Вторая строка ввода содержит \(N\) разделённых пробелом целых чисел, \(p_1, p_2, p_3, \dots, p_N\), указывающих начальное размещение коров.

ФОРМАТ ВЫВОДА (файл sleepy.out):

Одно целое число - минимальное количество команд, которые должен дать ФД чтобы отсортировать всех коров.

Беси начал изучать алгоритмы с различных WEB-ресурсов.

Её любимый алгоритм - пузырьковая сортировка. Ниже приведена его реализация в коровьем коде, которая сортирует массив \(A\) длины \(N\).

sorted = false
while (not sorted):
   sorted = true
   moo
   for i = 0 to N-2:
      if A[i+1] < A[i]:
         swap A[i], A[i+1]
         sorted = false

Команда "moo" выводит слово "moo".

По данному массиву предскажите, сколько раз будет напечатано слово "moo" этим кодом Беси.

ФОРМАТ ВВОДА (файл sort.in):

Первая строка ввода содержит \(N\) (\(1 \leq N \leq 100,000\)). Следующие \(N\) строк описывают \(A[0] \ldots A[N-1]\), каждая - целое число в интервале \(0 \ldots 10^9\). Не гарантируется, что все элементы различны.

ФОРМАТ ВЫВОДА (файл sort.out):

Выведите, сколько раз будет напечатано слово "moo"

Беси сделала гибрид из двух любимых алгоритмов пузырьковой сортировки и быстрой сортировки:

Назовём позицию между элементами \(i\) и \(i+1\) массива \(A\) точкой разбиения если максимум из \(A[...i]\) не больше чем минимум \(A[i+1 \ldots]\). Беси помнит, что быстрая сортировка реорганизует массив так, чтобы у него появилась точка разбиения, а затем рекурсивно сортирует две стороны \(A[...i]\) и \(A[i+1 \ldots]\). Однако хотя она помнит, что все точки разбиения можно найти за линейное время, она забыла как в быстрой сортировке реорганизуется массив, чтобы быстро создать точку разбиения. Она решила использовать пузырьковую сортировку для решения этой задачи

Ниже приведен алгоритм Беси Сначала она написала простую функцию, которая делает один проход пузырьковой сортировки:

bubble_sort_pass (A) {
   for i = 0 to length(A)-2
      if A[i] > A[i+1], swap A[i] and A[i+1]
}

Рекурсивный код Беси для "быстрой" сортировки такой:

quickish_sort (A) {
   if length(A) = 1, return
   do { // Main loop
      work_counter = work_counter + length(A)
      bubble_sort_pass(A)
   } while (no partition points exist in A) 
   divide A at all partition points; recursively quickish_sort each piece
}

Теперь Беси интересно, насколько быстро работает её код. Для простоты она считает, что её итерация работает линейно и поэтому она просто инкрементирует глобальную переменную work_counter внутри цикла текущим размером массива так, чтобы оценивать общую работу, выполненную алгоритмом.

По заданному входному массиву, предскажите финальное значение величины work_counter после завершения алгоритма quickish_sort.

ФОРМАТ ВВОДА (файл sort.in):

Первая строка ввода содержит \(N\) (\(1 \leq N \leq 100,000\)). Следующие \(N\) строк описывают \(A[0] \ldots A[N-1]\), каждый из которых является целым числом в интервале \(0 \ldots 10^9\). Не гарантируется, что все элементы различны.

ФОРМАТ ВЫВОДА (файл sort.out):

Выведите конечное значение величины work_counter

Беси изучает алгоритмы на web-ресурсах.

Её любимый алгоритм называется "пузырьковая сортировка". Ниже приведена начальная его версия в коровьем коде для сортировки массива \(A\) из \(N\) элементов.

sorted = false
while (not sorted):
   sorted = true
   moo
   for i = 0 to N-2:
      if A[i+1] < A[i]:
         swap A[i], A[i+1]
         sorted = false

Команда "moo" выводит слово "moo".

После тестирования кода на нескольких массивах, Беси сделала интересное наблюдение: в то время ка большие элементы становятся в конец массива очень быстро, маленькие элементы становятся в начало массива очень медленно. Для дальнейшего исследования проблемы, Беси модифицировала свой код так, чтобы её код сканировал элементы вперёд а затем назад на каждой итерации главного цикла, так чтобы и большие элементы и маленькие элементы быстро достигали границ массива. Ниже представлен её код.

sorted = false
while (not sorted):
   sorted = true
   moo
   for i = 0 to N-2:
      if A[i+1] < A[i]:
         swap A[i], A[i+1]
   for i = N-2 downto 0:
      if A[i+1] < A[i]:
         swap A[i], A[i+1]
   for i = 0 to N-2:
      if A[i+1] < A[i]:
         sorted = false

По заданному входному массиву предскажите, сколько раз слово "moo" будет напечатано этим модифицированным кодом.

ФОРМАТ ВВОДА (файл sort.in):

Первая строка ввода содержит \(N\) (\(1 \leq N \leq 100,000\)). Следующие \(N\) строк описывают \(A[0] \ldots A[N-1]\). Каждый элемент - целое число в интервале \(0 \ldots 10^9\). Не гарантируется, что все элементы различны.

ФОРМАТ ВЫВОДА (файл sort.out):

Выведите сколько раз meltn напечатано слово "moo".

Чтобы увеличить свой доход, Фермер Джон организовал сервис по аренде коров.

У ФД есть \(N\) коров (\(1 \leq N \leq 100,000\)), каждая способна производить некоторое количество молока каждый день. \(M\) магазинов (\(1 \leq M \leq 100,000\)) недалеко от фермы Джона покупают определённое количество молока, каждый по своей цене. Более того, \(R\) (\(1 \leq R \leq 100,000\)) соседних фермеров заинтересованы в аренде коров по некоторой цене.

ФД должен выбрать для каждой коровы, доить её самому или отдать в аренду соседнему фермеру. Помогите ФД определить максимальное количество денег, которое он может заработать за один день.

ФОРМАТ ВВОДА (файл rental.in):

Первая строка ввода содержит \(N\), \(M\), \(R\). Каждая из следующих \(N\) строк содержит целое число \(c_i\) (\(1 \leq c_i \leq 1,000,000\)), указывающее, что \(i\)-ая корова ФД может произвести \(c_i\) галлонов молока в день. Каждая из \(M\) строк содержит два целых числа \(q_i\) и \(p_i\) (\(1 \leq q_i, p_i \leq 1,000,000\)), которые обозначают, что \(i\)-ый магазин готов купить \(q_i\) галлонов молока по \(p_i\) центов за галлон. Имейте ввиду, что ФД может продавать любое количество молока от 0 до \(q_i\) галлонов в этот магазин. Каждая из следующих \(R\) строк содержит целое число \(r_i\) (\(1 \leq r_i \leq 1,000,000\)), означающее, что один из соседей ФД хочет арендовать корову за \(r_i\) центов в день.

ФОРМАТ ВЫВОДА (файл rental.out):

Вывод должен содержать одну строку - максимальную прибыль ФД, которую он может получить за один день, доя или сдавая в аренду каждую из своих коров. Заметим, что ответ может оказаться большим, чтобы поместиться в 32-битное целое, поэтому Вы должны использовать тип как "long long" в C/C++.

Фермер Джон открыл бассейн для своих коров, чтобы они там отдыхали и потом давали больше молока.

Чтобы обеспечить безопасность, он нанял \(N\) коров спасателями, каждый из которых работает в течение некоторого интервала времени в течение дня. Для простоты, бассейн открыт с момента времени \(t=0\) до момента времени \(t = 1,000,000,000\) каждый день. Поэтому каждый интервал может быть описан двумя целыми числами - временем начала и конца работы спасателя. Например, спасатель, начинающий в момент времени \(t = 4\) и завершающий в момент времени \(t = 7\), покрывает интервал в три единицы времени.

К несчастью, ФД нанял на одного спасателя больше чем может платить зарплату. При условии, что он должен уволить одного спасателя, какой максимальный интервал времени, будет покрыт оставшимися спасателями? Интервал времени покрыт, если присутствует хоть один спасатель в это время.

ФОРМАТ ВВОДА (файл lifeguards.in):

Первая строка ввода содержит \(N\) (\(1 \leq N \leq 100,000\)). Каждая из последующих \(N\) строк описывает интервалы работы спасателей двумя целыми числами в интервале \(0 \ldots 1,000,000,000\), задающими начало и конец работы спасателя. Все числа концы интервалов - различны. Сами интервалы могут перекрываться.

ФОРМАТ ВЫВОДА (файл lifeguards.out):

Выведите одно целое число - максимальное количество времени, которое останется покрытым, если ФД уволит одного спасателя.

Фермер Джон решил сфотографировать всё свое стадо коров.

Для красоты ФД хочет построить своих коров в ряд по возрастанию роста. К несчастью, сразу после того, как коровы выстроились в нужном порядке, Беси вышла со своего места и стала на другое.

ФД хочет обменять пары коров, так чтобы снова стадо выстроилось в нужном порядке. Определите минимальное количество обменов, которые должен сделать ФД, чтобы вернуть порядок в строю коров.

ФОРМАТ ВВОДА (файл outofplace.in):

Первая строка ввода содержит \(N\) (\(2 \leq N \leq 100\)). Следующие \(N\) строк описывают высоты коров как они стоят после того как Беси перешла. Каждая высота - целое число в интервале \(1 \ldots 1,000,000\). Коровы могут иметь одинаковую высоту.

ФОРМАТ ВЫВОДА (файл outofplace.out):

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

На съезд прибыли коровы со всего мира.

На маленькой полянке есть очень редкая трава. Как результат, все \(N\) (\(1 \leq N \leq 10^5\)) коров, прибывших на конференцию, хотят попробовать эту траву. Они выстраиваются в огромную очередь, поскольку на полянке может быть в один момент времени только одна корова.

Фермер Джон знает время \(a_i\), в которое корова \(i\) планирует прибыть на это пастбище, а также количество времени \(t_i\), которое эта корова собирается провести на этом специальном пастбище. После того, как корова \(i\) начинает есть траву, она делает это всё время \(t_i\), в течение которого все вновь прибывшие коровы вынуждены ждать. Если несколько коров ждут, когда пастбище освободится, корова с более высоким старшинством будет следующей на поедание травы. С этой целью корова, которая прибывает прямо, когда другая корова завершает есть траву, называется "ожидающей". Аналогично, если некоторое количество коров прибывает в один и тот же момент времени, и никакая корова не ест, то корова с более высоким старшинством принимается за еду.

Помогите ФД вычислить максимальное количество времени, которое придётся ждать любой корове (между временем \(a_i\) и временем, когда она начнёт есть).

ФОРМАТ ВВОДА (файл convention2.in):

Первая строка ввода содержит \(N\). Каждая из последующих \(N\) строк указывает детали \(N\) коров в порядке старшинства (более старшая корова - первая). Каждая строка содержит \(a_i\) и \(t_i\) для одной коровы. \(t_i\) - положительные целые числа, не превышающие \(10^4\), \(a_i\) - положительные целые числа, не превышающие \(10^9\).

ФОРМАТ ВЫВОДА (файл convention2.out):

Выведите наибольшее потенциальное время ожидания среди всех коров.

На ферме Джона состоится съезд по поеданию травы.

Коровы со всего мира прибывают в местный аэропорт, чтобы посетить съезд и поесть траву. А именно \(N\) (\(1 \leq N \leq 10^5\)) коров прибывают в аэропорт, и корова \(i\) прибывает в момент времени \(t_i\) (\(0 \leq t_i \leq 10^9\)). ФД организовал \(M\) (\(1 \leq M \leq 10^5\)) автобусов для транспортировки коров из аэропорта. Каждый автобус может вместить до \(C\) (\(1 \leq C \leq N\)) коров. ФД ждёт вместе с автобусами в аэропорту и собирается распределить прибывающих коров по автобусам. Автобус убывает из аэропорта в момент, когда прибывает последняя корова. ФД хочет, чтобы прибывающие коровы не ждали в аэропорту слишком долго. Каково наименьшее значение максимального времени ожидания из всех коров, если ФД оптимально назначит их по автобусам. Время ожидания коровы есть разность между временем её прибытия и временем отправления автобуса, в который она распределена.

Гарантируется, что \(MC \geq N\).

ФОРМАТ ВВОДА (файл convention.in):

Первая строка содержит три разделённых одиночными пробелами целых числа \(N\), \(M\), \(C\). Следующая строка содержит \(N\) разделённых одиночными пробелами целых чисел, представляющих время прибытия каждой коровы.

ФОРМАТ ВЫВОДА (файл convention.out):

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

Беси собрала \(N\) алмазов (\(N \leq 50,000\)) различных размеров. И хочет разместить их в двух ящиках в амбаре. Беси не будет включать в один ящик алмазы, если их размеры отличаются более чем на \(K\). По заданному \(K\) определите максимальное количество алмазов, которое Беси сможет разместить в двух ящиках вместе.

ФОРМАТ ВВОДА (файл diamond.in):

Первая строка ввода содержит \(N\) и \(K\) (\(0 \leq K \leq 1,000,000,000\)). Каждая из следующих \(N\) строк содержит целое число - размер одного алмаза. Все размеры - положительные и не превышают \(1,000,000,000\).

ФОРМАТ ВЫВОДА (файл diamond.out):

Выведите одно положительное целое число, указывающее максимальное количество алмазов, которое Беси может разместить в двух ящиках вместе.

Беси собрала \(N\) алмазов (\(N \leq 1000\)) различных размеров. И хочет разместить их специальным образом в амбаре.

Она не будет включать в размещение два алмаза, если их размеры отличаются более чем на \(K\). По данному \(K\) определите максимальное количество алмазов, которые Беси разместит в амбаре.

ФОРМАТ ВВОДА (файл diamond.in):

Первая строка ввода содержит \(N\) и \(K\) (\(0 \leq K \leq 10,000\)). Каждая из следующих \(N\) строк содержит целое число, определяющее размер одного из алмазов. Все размеры - положительные числа, не превышающие \(10,000\)

ФОРМАТ ВЫВОДА (файл diamond.out):

Выведите одно положительное целое число - максимальное количество алмазов, которое Беси сможет показать.


N коров (1 <= N <= 50,000) Фермера Джона пасутся вдоль одномерного забора. Корова с номером I находится в точке x(i) и имеет высоту h(i) (1 <=x(i),h(i) <= 1,000,000,000).
Корове «тесно», если имеется другая корова слева от нее на расстоянии ближе, чем её удвоенная высота внутри расстояния D и также другая корова справа от неё на расстоянии ближе чем её удвоенная высота внутри расстояния D (1 <= D <= 1,000,000,000). ФД хочет посчитать количество коров, которым тесно. Помогите ему.
PROBLEM NAME: crowded
Формат входных данных
* Строка 1: Два целых числа, N и D.
* Строки 2..1+N: Строка i+1 содержит целые числа x(i) и h(i). Расположения всех коров различны.
Формат выходных данных
* Строка 1: Количество коров, которым тесно.
Примечание
«Тесно» коровам в позициях x=5 и x=6.

На ферме Goldilocks имеется N коров (1 <= N <=20,000), очень чувствительных к температуре.
Для каждой коровы указывается диапазон температур A(i)..B(i), которые допустимы. (0 <= A(i) <= B(i) <= 1,000,000,000). Если температура TB(i), то этой корове слишком жарко и она производит Z единиц молока. Y всегда больше чем и X, и Z.
По данным X Y Z а также наборам допустимых температур для каждой коровы, определите максимальное количество молока, которое может получить Goldilocks установкой оптимальной температуры (единой для всех коров).
Z Y Z – целые в диапазоне от 0 до 1000, а температура может быть установлена в любое целое значение.
Частичное оценивание: Из десяти тестов для этой задачи в тестах 1..4 B(i)<=100 для каждой коровы, и в тестах 1..6 значение N не превышает 1000.
PROBLEM NAME: milktemp
Формат входных данных
* Строка 1: Четыре разделённых пробелом целых числа: N X Y Z.
* Строки 2..1+N: Строка 1+i содержит два разделённых пробелом целых числа : A(i) B(i).
Формат выходных данных
* Строка 1: Максимальное количество молока, которое можно получить установкой оптимальной температуры в амбаре.


Примечание
Если установить температуру в 7 или 8, то коровам с номерами 1 и 4 будет комфортабельно, корове 2 будет жарко, а корове 3 – холодно. Всего будет произведено 31 единица молока.


Корова Беси красит забор Фермеру Джону. Беси начинает в позиции 0 и выполняет последовательность из N инструкций. (1 <= N <= 100,000) вида "10 L", что означает покрасить 10 единиц влево и "15 R", что означает покрасить 15 единиц вправо.
Бесси может уйти не далее чем на 1,000,000,000 единиц от исходной точки.
По имеющей инструкции ФД хочет узнать область забора, которая покрашена как минимум K слоями краски.
PROBLEM NAME: paint
Формат входных данных
* Строка 1: Целые N и K
* Строки 2..1+N: Каждая строка описывает одну из N инструкций
Формат выходных данных
* Строка 1: Общая часть, покрашенная как минимум K слоями краски.
Примечание
6 единиц покрыто как минимум 2 слоями краски. Это интервалы: [-11,-8], [-4,-3], [0,2].

Каждый день N (1 <= N <= 100,000) коров Фермера Джона переходят дорогу, расположенную в середине фермы. Рассмотрим карту фермы Джона на 2D-плоскости, дорога идет горизонтально, одна сторона дороги описывается прямой y=0, другая - прямой y=1.
Корова i пересекает дорогу, следуя по прямой из позиции (ai,0) на одной стороне в позицию (bi,1) на другой стороне. Все ai различны, так же как и все Bi. И все эти числа находятся в диапазоне -1,000,000...1,000,000.
ФД называет переход безопасным, если он не пересекается никакими другими переходами. Помогите ФД подсчитать количество безопасных переходов.
PROBLEM NAME: crossings
Формат входных данных
* Строка 1: Количество коров, N.
* Строки 2..1+N: Строка i содержит целые числа ai и bi, описывающие путь коровы i.
Формат выходных данных
* Строка 1: Количество безопасных переходов.
Примечание
Переходы первой и третьей коров не пересекаются переходами никаких других коров. Переходы второй и четвертой коров пересекают друг друга.

N (3 <= N <= 1000) коров Фермера Джона стоят в ряд, каждая в различной позиции на числовой прямой. Они бросают друг другу мяч по кругу в порядке подготовки к важной игре с коровами с соседней фермы.
ФД заметил, что группа из 3 коров (X,Y,Z) делает два успешных броска. Корова X бросает мяч вправо от себя корове Y, а затем корова Y бросает Мяч вправо от себя корове Z. ФД заметил также, что второй бросок получается на расстояние не менее чем первый бросок и не более чем в два раза превышает первый бросок. Посчитайте количество возможных троек коров, которые ФД мог наблюдать.
PROBLEM NAME: baseball
Формат входных данных
* Строка 1: Количество коров, N.
* Строки 2..1+N: Каждая строка содержит целую координату одной коровы (целое число в диапазоне 0..100,000,000).
Формат выходных данных
* Строка 1: Количество троек коров (X,Y,Z), где Y справа от X, а Z справа от Y и расстояние от Y до Z находится между XY и 2XY (включительно), где XY представляет расстояние от X до Y.
Примечание
Три возможных тройки: 1-3-7, 1-4-7, 1-4-10, 4-7-10.
Islands#89852

Когда идут ливневые дожди, поля Фермера Джона всегда подтапливаются. И, поскольку имеется рельеф местности, в результате образуются острова, разделенные пространствами воды.
Поля ФД описаны как одноместный рельеф, указанием N (1 <= N <= 100,000) последовательных высот H(1)...H(n). Представим себе, что этот рельеф ограничен с обоих сторон валами бесконечной высоты. Теперь рассмотрим, что случится во время ливневого дождя: сначала водой покрываются нижние регионы, при этом получаются, разъединенные «острова», которые, в конце концов, могут все покрыться водой, если она будет прибывать и прибывать. Если уровень воды становится равным уровню куска земли, то этот кусок считается покрытым водой.

Пример показан на рисунке выше: слева мы добавили 1 единицу воды, и покрыли 4 острова. Затем мы добавили еще 7 единиц воды и теперь только два острова торчат из воды. Вычислите максимальное количество островов, которое мы сможем увидеть, если вода будет прибывать с нуля и до тех пор, пока весь рельеф не скроется под водой.

PROBLEM NAME: islands
Формат входных данных
* Строка 1: Целое число N.
* Строки 2..1+N: Строка i+1 содержит высоту H(i). (1 <= H(i) <= 1,000,000,000)
Формат выходных данных
* Строка 1: Одно целое число, определяющее максимальное количество островов, которое получится в один момент времени во время проливного дождя.

Flowerpot#89839

Фермер Джон нуждается в Вашей помощи в организации поливки. Вам даны координаты N поливателей (1 <= N <= 100,000) на декартовой плоскости, где y представляет высоту поливателя. А x - его местоположение на прямой.

Каждая капля воды падает вертикально (по направлению к оси x) со скоростью 1 единица в секунду. Вы должны разместить клумбу (шириной W) с цветами так, чтобы разница во времени, когда первая капля упадет на клумбу и когда последняя капля упадет на клумбу была не менее некоторой величины D. Капля, которая попадает на границу клумбы, считается попавшей на клумбу.
Вам даны значения D, а также местоположения и высоты поливателей. Вычислите минимально возможную величину W.
PROBLEM NAME: fpot
Формат входных данных
* Строка 1: Два разделенных пробелом целых числа N и D. (1 <= D <=1,000,000) * Строки 2..1+N: Строка i+1 содержит разделенные пробелом координаты (x,y) поливателя i, все величины в интервале 0...1,000,000.
Формат выходных данных
* Строка 1: Одно целое число, минимально-возможную ширину клумбы. Выведите -1, если невозможно построить клумбу, которая получала бы воду в течение не менее D единиц времени
Примечание
Клумба шириной 2 возможна, если разместить ее с x от 4 до 6. Тогда она будет получать капли с поливателей #1 и #3, втечение времени 10-3 = 7.

Беси согласилась помочь ФД уложить пакеты с сеном. Она начинает с N (1 <= N <= 1,000,000, N нечетное) пустых стеков, пронумерованных от 1 до N. Затем ФД дает ей последовательность из K инструкций (1 <= K <= 25,000), каждая вида A B, означающая, что Беси должна добавить по одному пакету с сеном в каждый из стеков в диапазоне от A до B. Например, инструкция 10 13 означает, что Беси должна положить по пакету сеном в стеки 10, 11, 12, 13.
После того как вся работа закончена, ФД хочет узнать медианную высоту всех N своих стеков - то есть высоту среднего стека, если все стеки упорядочить по высоте. По условию N нечетно, поэтому этот стек уникален. Пожалуйста, помогите Беси ответить на этот вопрос.
PROBLEM NAME: stacking
Формат входных данных
* Строка 1: Два разделенных пробелом целых числа, N K.
* Строки 2..1+K: Каждая строка содержит одну инструкцию ФД в виде двух целых (разделенных пробелом) чисел A B (1 <= A <= B <= N).

Формат выходных данных
* Строка 1: Медианная высота после того как Беси выполнит все инструкции


Примечание
После того, как Беси закончит, стеки будут иметь высоты 0,1,2,3,3,1,0. Если их упорядочить, получим: 0,0,1,1,2,3,3. Средний элемент равен 1.

Фермер Джон купил новую машину, которая умеет садить траву в прямоугольном регионе со сторонами, параллельными осям координат. К несчастью, эта машина однажды сломалась и посадила траву не в одном, а в N (1 <= N <= 10) различных регионах, некоторые из которых могут даже перекрываться.
По заданным прямоугольным регионам, засаженным травой, помогите ФД определить общую площадь, покрытую травой.
PROBLEM NAME: planting

Формат входных данных
* Строка 1: Целое число N.
* Строки 2..1+N: Каждая строка содержит четыре разделенных одиночными пробелами целых числа x1 y1 x2 y2 указывающих прямоугольный регион с верхним - левым углом (x1,y1) и нижним – правым углом (x2,y2). Все координаты – целые числа в диапазоне -10,000...10,000.

Формат выходных данных
* Строка 1: Общая площадь, покрытая травой.
Поделиться
Класснуть