Ctrl K

Несведённые заявки на бирже

Средняя
На бирже ведётся книга заявок, сначала пустая. В неё по очереди поступают пачки заявок из списка orders: тройка [price, amount, side] означает amount одинаковых заявок по цене price; side = 0 — покупка, side = 1 — продажа. Заявки внутри пачки и сами пачки обрабатываются строго по порядку, по одной. Когда приходит заявка на покупку, биржа смотрит на самую дешёвую продажу в книге. Если её цена не выше цены покупки, обе заявки исполняются, и продажа уходит из книги. Иначе покупка ложится в книгу. Заявка на продажу обрабатывается зеркально: берётся самая дорогая покупка в книге; если её цена не ниже цены продажи, обе исполняются, иначе продажа ложится в книгу. Верните, сколько заявок осталось в книге после обработки всех пачек. Число может быть большим, поэтому верните его по модулю 10⁹ + 7.
Пример 1
orders=[[20, 3, 1], [18, 2, 0], [25, 4, 0]] → 3

3 заявки на продажу по 20 ждут в книге. 2 заявки на покупку по 18 не дотягивают до 20 и тоже ждут. Из 4 покупок по 25 три забирают продажи по 20, а одна остаётся. В книге: 2 покупки по 18 и 1 покупка по 25 — всего 3.

Пример 2
orders=[[10, 5, 0], [8, 5, 1]] → 0

Продажа по 8 не дороже покупки по 10, поэтому все 5 продаж сводятся с 5 покупками. Книга пуста.

Пример 3
orders=[[5, 1000000000, 1], [5, 1000000000, 1]] → 999999993

Покупок нет, все 2·10⁹ продаж остаются, ответ 2·10⁹ по модулю 10⁹ + 7.

Ограничения
  • 1 ≤ len(orders) ≤ 10⁵
  • 1 ≤ price, amount ≤ 10⁹
  • side равно 0 или 1
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиХватит ли мест в шаттле СредняяНайм с двух концов очереди СредняяВычёркивание с самого маленького СредняяРаунды по максимумам строк СредняяСплавить два самых лёгких Средняя
загружаем Python…
Вход
orders=[[20, 3, 1], [18, 2, 0], [25, 4, 0]]
Ожидается
3

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 116 тестов на сервере, включая скрытые.