eolymp
bolt
Try our new interface for solving problems
Problems

Выпуклая оболочка

Выпуклая оболочка

Задано множество точек на плоскости, а также \textbf{N} операций, которые модифицируют это множество. Каждая операция может быть одного из двух следующих типов: \begin{enumerate} \item Добавить в множество точку с целыми координатами. При этом абсцисса (т.е. \textbf{X}-координата) новой точки строго больше чем абсциссы всех других точек, которые уже находятся в множестве. \item Удалить из множества точку с наибольшей абсциссой. \end{enumerate} Напишите программу, которая по заданной последовательности из N операций промоделирует их выполнение и после каждой из них выведет удвоенную площадь выпуклой оболочки точек множества. Перед выполнением первой операции множество точек пустое. Будем считать, что площадь выпуклой оболочки пустого множества точек равна нулю. Выпуклой оболочкой множества точек на плоскости называется выпуклый многоугольник наименьшей площади, который содержит все точки из множества. Мноугольник называется выпуклым, если отрезок, который соединяет любые две его точки целиком принадлежит этому многоугольнику. Тут под многоугольником понимается граница фигуры вместе с ее внутренностью. \InputFile Первая строка содержит одно целое число \textbf{N }(\textbf{1 }≤ \textbf{N }≤ \textbf{100000}) - количество операций, которое требуется выполнить. Последующие \textbf{N }строк содержат по три целых числа -- информацию об операциях в зашифрованном формате. Для того, чтобы получить параметры операции с номером \textbf{i}, требуется считать три целых числа \textbf{T*}, \textbf{X*} и \textbf{Y*} (\textbf{0 }≤ \textbf{T*} ≤ \textbf{1}, \textbf{0 }≤ \textbf{X*}, \textbf{Y*} ≤ \textbf{2000000000}) с (\textbf{i + 1})-ой строки, после чего получить число \textbf{T }по следующей формуле: \textbf{T = (T* + S) mod 2}, где \textbf{S - }это удвоенная площадь выпуклой оболочки точек множества до выполнения операции с номером \textbf{i}. Можно убедиться, что \textbf{S }всегда есть целым числом. \begin{enumerate} \item Если \textbf{T = 0}, то очередная операция первого типа и координаты (\textbf{X}, \textbf{Y}) новой точки получаются по следующим формулам: \textbf{X = L + ((S + X*) mod 2 000 000 001)}, \textbf{Y = ((Y* + S) mod 2 000 000 001) -- 1 000 000 000}. Тут \textbf{L} - это максимальная из абсцисс всех точек из множества. Если множество пустое, то \textbf{L = -1 000 000 000}. \item Если \textbf{T = 1}, то требуется \textbf{K }раз выполнить операцию второго типа. Число \textbf{K }находится по формуле: \textbf{K = ((X* + Y* + S) mod Q) + 1}. Тут \textbf{Q }- это количество точек в множестве. \end{enumerate} Гарантируется, что при правильной расшифровке всех операций выполняются следующие ограничения: \begin{enumerate} \item Координаты всех точек, которые добавляются к множеству, не превышают \textbf{1 000 000 000} по модулю. \item При добавлении новой точки ее абсцисса строго больше чем абсциссы всех точек, которые уже лежат в множестве. \item Операция удаления применяется только к непустому множеству точек. \end{enumerate} \OutputFile Вывести следует \textbf{N} строк. В строке с номером \textbf{i }требуется вывести удвоенную площадь выпуклой оболочки множества точек, которая образовалась после выполнения первых \textbf{i} операций. Если множество точек оказалось пустым, то площадь его выпуклой оболочки считать равной \textbf{0}. \textit{\textbf{Объяснение}}. После расшифровки тест выглядит таким образом: \textbf{T} = \textbf{0}, \textbf{X} = \textbf{0}, \textbf{Y} = \textbf{0} \textbf{T} = \textbf{0}, \textbf{X} = \textbf{1000000}, \textbf{Y} = \textbf{1000000} \textbf{T} = \textbf{0}, \textbf{X} = \textbf{2000000}, \textbf{Y} = \textbf{-1000000} \textbf{T} = \textbf{0}, \textbf{X} = \textbf{3000000}, \textbf{Y} = \textbf{0} \textbf{T} = \textbf{1}, \textbf{K} = \textbf{1} \textbf{T} = \textbf{1}, \textbf{K} = \textbf{2}
Time limit 0.25 seconds
Memory limit 64 MiB
Input example #1
6
0 1000000000 1000000000
0 1000000 1001000000
0 1000000 999000000
0 1001500 1000001500
1 85072946 2
1 61619603 2
Output example #1
0
0
3000000000000
6000000000000
3000000000000
0
Author Ярослав Твердохлеб
Source 2012 XXV All-Ukrainian Informatics Olympiad, Vinnitsa, March 24 - 28, Round 2