Kotlin Heroes: Episode 3 |
---|
Закончено |
Поликарп изобрел новую мобильную игру с падающими блоками.
В этой игре $$$n$$$ блоков падают, по-одному за раз, на плоскую поверхность шириной $$$d$$$ единиц. Каждый блок можно представить как прямоугольник с координатами от $$$l_i$$$ до $$$r_i$$$ и единичной шириной, падающий вниз с большой высоты. Блок падает, пока не столкнется с плоской поверхностью или другим блоком. Будем говорить, что блок $$$a$$$ накрывает блок $$$b$$$, если $$$l_a \le l_b \le r_b \le r_a$$$.
Рассмотрим, что происходит, когда падает блок $$$i$$$. Если этот (верхний) блок $$$i$$$ сталкивается с любым блоком $$$j$$$, таким что блок $$$i$$$ не накрывает блок $$$j$$$, то блок $$$i$$$ упрется в блок $$$j$$$, и все блоки останутся на месте. В противном случае, все блоки, с которыми блок $$$i$$$ столкнулся и накрывает будут уничтожены, а блок $$$i$$$ продолжит падать, не теряя способности уничтожать другие блоки.
Например, рассмотрим, что случится, когда будут падать блоки $$$(1,2)$$$, $$$(2,3)$$$ и $$$(1,3)$$$ в данном порядке. Первый блок приземлится на плоскую поверхность. Далее, второй блок упрется в первый блок. Наконец, третий блок сначала уничтожит второй блок, продолжит падать, уничтожит первый блок и приземлится на плоскую поверхность.
Помогите Поликарпу определить количество оставшихся блоков после падения каждого из них!
В первой строке заданы два целых числа $$$n$$$ и $$$d$$$ ($$$1 \le n, d \le 10^5$$$) — количество падающих блоков и длина плоской поверхности.
В $$$i$$$-й из следующих $$$n$$$ строк заданы два целых числа $$$l_i$$$ и $$$r_i$$$ ($$$1 \le l_i \le r_i \le d$$$), описывающих координаты $$$i$$$-го блока.
Выведите $$$n$$$ чисел, где $$$i$$$-е число равно количеству оставшихся блоков после падения $$$i$$$-го из них.
3 3 1 2 2 3 1 3
1 2 1
8 6 1 2 3 3 2 3 1 3 2 4 3 6 1 5 1 5
1 2 3 1 2 3 4 4
Первый пример соответствует примеру из условия.
Во втором примере, происходят следующие изменения:
Название |
---|