Обідня перерва
Обмеження: 2 сек., 512 МіБ
Виконавши швидке доручення Шефа, Зеник добряче так зголоднів. Місцева їдальня розташована в крайньому проході офісу. Хоча місце є доволі просторим та комфортним, та є один нюанс — воно єдине. Такі дрібниці ніщо у порівнянні з голодним шлунком.
Всього в компанії є \(n\) працівників. Працівник \(i\) (\(1 \le i \le n\)) планує прийти на обід в момент часу \(t_i\) (причому немає двох працівників, які планують прийти до їдальні в той самий момент часу) та їстиме свій обід \(s_i\) часу. За таких обставин існує ймовірність виникнення черги, тож кожен працівник має певне обмеження на очікування \(p_i\) — максимальну кількість часу, яку він може стояти в черзі.
Вас же просять знайти кількість працівників, яким таки вдасться пообідати та вивести їхні номери в порядку прийому їжі. Двоє людей не можуть одночасно обідати. Часом на перехід людей можете знехтувати — якщо якийсь працівник закінчує обід в час \(t\), то наступний може почати в той самий момент.
Вхідні дані
У першому рядку задано одне ціле число \(n\) — кількість працівників компанії.
У другому рядку задано \(n\) цілих чисел \(t_i\), де \(i\)-те число позначає час приходу на обід \(i\)-го працівника.
У третьому рядку задано \(n\) цілих чисел \(s_i\), де \(i\)-те число позначає тривалість обіду \(i\)-го працівника.
У четвертому рядку задано \(n\) цілих чисел \(p_i\), де \(i\)-те число позначає максимальний час очікування \(i\)-го працівника.
Вихідні дані
У першому рядку виведіть ціле число \(k\) — кількість людей, яким вдасться пообідати.
У другому рядку виведіть \(k\) цілих чисел — номери працівників в порядку, в якому вони обідали.
Обмеження
\(1 \leq n \leq 2 \cdot 10^5\),
\(1 \leq t_i, s_i, p_i \leq 10^8\),
Усі \(t_i\) — унікальні.
Оцінювання складається з таких блоків:
по 1 балу за кожен приклад з умови,
7 балів: \(n \leq 15\), \(t_i < t_{i+1}\), \(t_i \leq 1000\), \(s_i \leq 1000\), \(p_i \leq 1000\),
10 балів: \(n \leq 1000\), \(t_i < t_{i+1}\), \(t_i \leq 1000\), \(s_i \leq 1000\), \(p_i \leq 1000\),
16 балів: \(n \leq 1000\), \(t_i < t_{i+1}\),
8 балів: \(t_i + s_i < t_{i+1}\),
17 балів: \(t_i < t_{i+1}\),
40 балів: без додаткових обмежень.
Бали за блок ви отримаєте, тільки якщо ваша програма пройде всі тести з блоку.
Приклади
Вхідні дані (stdin) | Вихідні дані (stdout) |
---|---|
4 1 4 7 9 4 5 8 7 2 1 2 4 | 3 1 2 4 |
Вхідні дані (stdin) | Вихідні дані (stdout) |
---|---|
4 4 5 6 7 7 1 1 1 4 4 4 3 | 1 1 |
Примітки
У першому прикладі перший працівний приходить на обід в момент \(t_1 = 1\) та завершує свій обід в момент \(t_1 + s_1 = 5\). Другий працівник приходить в момент \(t_2 = 4\), проте змушений чекати ще 1 хвилину, поки перший працівний завершить свій обід. Таким чином, другий працівник закінчить обід в момент \(5 + s_2 = 10\). Третій працівник приходить в момент часу \(t_3 = 7\), його максимальний час очікування \(p_3 = 2\), тобто він покидає чергу. Таким чином четвертий працівник приходить в \(t_4 = 9\), чекає 1хв та розпочинає обід.
У другому прикладі лише перший працівник пообідає, всі інші покинуть їдальню, не дочекавшись своєї черги.
Надіслати розв'язок
Element Type | Створено | Хто | Задача | Компілятор | Результат | Час (сек.) | Пам'ять (МіБ) | № | Дії |
---|
Element Type | Створено | Хто | Задача | Компілятор | Результат | Час (сек.) | Пам'ять (МіБ) | № | Дії |
---|