eolymp
bolt
Спробуйте наш новий інтерфейс для відправки розв'язків
Задачі

Опукла оболонка (запити)

Опукла оболонка (запити)

Задано множину точок на площині, а також $N$ операцій, що модифікують цю множину. Кожна операція може бути одного з двох наступних типів: \begin{enumerate} \item Додати до множини точку з цілими координатами. При цьому абсциса (тобто $X$ координата) нової точки є строго більшою за абсциси всіх інших точок, які вже знаходяться у множині. \item Видалити з множини точку з найбільшою абсцисою. \end{enumerate} Напишіть програму, яка за заданою послідовністю з N операцій промоделює їх виконання та після кожної з них виведе подвоєну площу опуклої оболонки точок множини. Перед виконанням першої операції множина точок є порожньою. Вважатимемо, що площа опуклої оболонки порожньої множини точок рівна нулю. Опуклою оболонкою множини точок на площині називається опуклий багатокутник найменшої площі, який містить всі точки з множини. Багатокутник називається опуклим, якщо відрізок, що сполучає будь-які дві його точки цілком належить цьому багатокутнику. Тут під багатокутником розуміється границя фігури разом з її внутрішністю. \InputFile Перший рядок містить одне ціле число: $N (1 \le N \le 100'000)$ – кількість операцій, які потрібно виконати. Наступні $N$ рядків містять по три цілих числа – інформацію про операції у зашифрованому форматі. Для того, щоб отримати параметри операції з номером i, потрібно зчитати три цілих числа $T*$, $X*$ та $Y*$ $(0 \le T* \le 1, 0 \le X*, Y* \le 2'000'000'000)$ з $(i+1)$-го рядку, після чого отримати число $T$ за наступною формулою: $T = (T* + S) \mod 2$, де $S$ - це подвоєна площа опуклої оболонки точок множини до виконання операції з номером $i$. Можна переконатись, що $S$ завжди є цілим числом. \begin{enumerate} \item Якщо $T=0$, то чергова операція першого типу і координати $(X,Y)$ нової точки отримуються за наступними формулами: \begin{itemize} \item $X=L+((S+X*) \mod 2'000'000'001)$, \item $Y = ((Y*+S) \mod 2'000'000'001) \ – \ 1'000'000'000$. \end{itemize} Тут $L$ – це максимальна з абсцис усіх точок з множини. Якщо множина порожня, то $L=-1'000'000'000$. \item Якщо $T=1$, то потрібно $K$ разів виконати операцію другого типу. Число $K$ знаходиться за формулою: $K= ((X*+Y*+S) \mod Q)+1$. Тут $Q$ – це кількість точок у множині. \end{enumerate} Гарантується, що при правильній розшифровці всіх операцій виконуються наступні обмеження: \begin{enumerate} \item Координати усіх точок, які додаються до множині, не перевищують $1'000'000'000$ за модулем. \item При додаванні нової точки її абсциса є строго більшою за абсциси усіх точок, які вже лежать в множині. \item Операція видалення застосовується лише до непорожньої множини точок. \end{enumerate} \OutputFile Потрібно вивести рівно $N$ рядків. В рядок з номером i потрібно вивести подвоєну площу опуклої оболонки множини точок, яка утворилася після виконання перших $i$ операцій. Якщо множина точок виявилася порожньою, то площу її опуклої оболонки вважати рівною 0. \Scoring Набір тестів складається з 4 окремих блоків, з такими додатковими обмеженнями: \begin{itemize} \item 15\% тестів: $N \le 300$ \item 15\% тестів: $N \le 3000$ \item 20\% тестів $N \le 100 000$, кількість рядків, у яких $T = 1$ (після розшифрування) не перевищує 100 \item 50\% тестів: $N \le 100 000$ \end{itemize} \Note Після розшифрування тест виглядає таким чином: \begin{itemize} \item $T = 0, X = 0, Y = 0$ \item $T = 0, X = 1000000, Y = 1000000$ \item $T = 0, X = 2000000, Y = -1000000$ \item $T = 0, X = 3000000, Y = 0$ \item $T = 1, K = 1$ \item $T = 1, K = 2$ \end{itemize}
Ліміт часу 0.25 секунд
Ліміт використання пам'яті 64 MiB
Вхідні дані #1
6
0 1000000000 1000000000
0 1000000 1001000000
0 1000000 999000000
0 1001500 1000001500
1 85072946 2
1 61619603 2
Вихідні дані #1
0
0
3000000000000
6000000000000
3000000000000
0
Автор Ярослав Твердохліб
Джерело 2012 XXV Всеукраїнська олімпіада з інформатики, Вінниця, Березень 24 - 28, тур 2