足跡-sokuseki-

りかの日進月歩の記録

ABC080 D Recording

D - Recording

問題概要

 N 個のテレビ番組を録画したい。
テレビが受信できるチャンネルが  C 個あり、1から  C までの番号がついている。
録画したいテレビ番組のうち、  i 個目のテレビ番組は、時刻  s_i から時刻  t_i までチャンネル  c_i で放送される(時刻  s_i を含み時刻  t_i を含まない)。同じチャンネルで複数のテレビ番組が同時に放送されることはない。
また、録画機は、あるチャンネルの時刻  S から時刻  T までを録画するとき、時刻  S − 0.5 から時刻  T までの間、他のチャンネルの録画に使うことができない(ただし時刻  S − 0.5 を含み時刻  T を含まない)。
必要な録画機の最小個数を求めよ。

制約
 1 \le N \le 10^5
 1 \le C \le 30
 1 \le s_i < t_i \le 10^5
 1 \le c_i \le C

解法

はじめは  C  c_i を無視してimos法したら解けるんじゃないかと思ったけど、2ケースWA。

いろいろ考えてるうちに、
2 1
1 2 1
2 3 1
のケースでダメなことがわかる。
この例でいくと、時刻1から時刻3までを録画したいから、時刻0.5から時刻3までを1つの録画機で録画したいけど、「時刻0.5から時刻2」「時刻1.5から時刻3」の2つを録画することになって、2個の録画機が必要という答えが出てしまう。
つまりチャンネルの情報は不要じゃなかった。

ということで、
v[  i ][  j ] := チャンネル  i で時刻  j に録画機を使う
という配列を作って、各チャンネルでimos法をする。
このときは、開始時刻を  S - 0.5 ではなく  S と考えてimos法をして、あとから録画開始時刻を1だけ早める(これで、同じチャンネルで連続して録画するときに重複をなくせる)。

あとは各時刻について、いくつのチャンネルで録画機が必要かを計算する。
計算量は  O(NC)


Submission #1986276 - AtCoder Beginner Contest 080