Основание пирамиды
Вас попросили отыскать размер наибольшего из возможных мест для строительства новой пирамиды. Для того, чтобы помочь вам принять решение, вам предоставлен план доступного участка, который для удобства поделен сеткой на MxN квадратных клеток. Основание пирамиды должно быть квадратом со сторонами, параллельными сторонам сетки.
На плане показано множество из P препятствий, которые являются прямоугольниками со сторонами, параллельными сторонам сетки. Прямоугольники могут перекрываться. Чтобы построить пирамиду, все клетки, покрытые ее основанием, должны быть очищены от препятствий. Устранение i-го препятствия имеет стоимость C_i. Всякий раз, когда препятствие устраняется, оно устраняется полностью, то есть, вы не можете устранить только часть препятствия.
Следует заметить, что устранение препятствия не влияет на другие препятствия, с которыми оно перекрывалось.
Напишите программу, которая по заданным размерностям сетки M и N, описанию P препятствий, стоимости устранения каждого из них, а также имеющемуся бюджету B находит максимальную длину стороны наибольшего из возможных мест для основания пирамиды, такого, что суммарная стоимость устранения препятствий не превосходит B.
Ограничения
Ваша программа будет оценена с использованием трех непересекающихся наборов тестов. Для всех них выполняются следующие ограничения:
1 <= M, N <= 1 000 000 (M, N – размерности решетки)
1 <= C_i <= 7 000 (C_i – стоимость устранения i-го препятствия)
1 <= X_i1 <= X_i2 <= M (X_i1 и X_i2 – X-координаты самой левой и самой правой клетки i-го препятствия, соответственно)
1 <= Y_i1 <= Y_i2 <= N (Y_i1 и Y_i2 – Y-координаты самой нижней и самой верхней клетки i-го препятствия, соответственно)
Входные данные
Ваша программа должна читать из стандартного ввода данные в следующем формате:
• Строка 1 содержит два целых числа, разделенных одним пробелом – M и N, соответственно.
• Строка 2 содержит целое число B – ваш бюджет.
• Строка 3 содержит целое число P – количество препятствий, имеющихся на плане.
• Каждая из последующих P строк описывает препятствие: i-ая из этих строк описывает i-ое препятствие. Каждая строка состоит из 5 целых чисел: X_i1, Y_i1, X_i2, Y_i2, и C_i, разделенных одиночными пробелами. Они задают соответственно координаты нижней левой клетки препятствия, координаты верхней правой клетки препятствия и стоимость устранения препятствия.
Нижняя левая клетка решетки имеет координаты (1, 1), верхняя правая клетка решетки имеет координаты (M, N).
Выходные данные
Ваша программа должна вывести в стандартный вывод единственную строку, содержащую одно целое число – максимальную возможную длину стороны основания пирамиды, которую можно построить. Если пирамиду построить нельзя, ваша программа должна вывести число 0.