ツバサの備忘録

主に備忘録代わりに精進記録を載せていくつもりです。

ABC127 C - Prison

問題
提出コード

解法

  • sum[i] = i枚目のカードを用いて通ることができるゲートの個数

とすると、sum[i] = Mとなるようなiの個数が答えになります。
ということで、各ゲートについて与えられる区間[L_{j},R_{j}]について、sum[L_{j}],sum[L_{j}+1],...sum[R_{j}]に1を追加する、という操作をしてあげれば、i枚目のカードを用いて通ることができるゲートの個数を求めることができます。
単純に加算していくと間に合わないので、いもす法を用います。
sum[L_{j}]に1を加算し、sum[R_{j}+1]から1を減らしてあげて、sum[1]から順番に累積和を取っていくと、O(N)で求めることができます。

感想

本番は、いもす法を利用して脳死で解きましたが、よくよく考えるとL_{i}の最大値とR_{i}の最小値だけを見ればよいのですね…
Nの制約が大きいと解くのに時間がかかった可能性があります。