ツバサの備忘録

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

ABC077 C - Snuke Festival

問題
提出コード
中段について、i番目のパーツを使うとしたときに、使うことができる下段のパーツはb_i \lt c_jとなるパーツ番号jの場合です。このようなjのうち最小のものをもとめれば、それより大きいN-j+1個のパーツはすべて使用できます。
ということで、まずはそれぞれのパーツについて、昇順でソートをしておきます。すると、先ほどのjの最小値は二分探索で求めることができます。
そして、b_iに対して使えるcのパーツの個数を記録していきます。
さて、a_kを使うと決めたときは、a_k \lt b_iとなるようなiの個数です。ということで、先ほどソートをしていたため、こうなるようなiの最小値を求めていれば、使えるb_i区間が決まります。
b_iを使用したときに使えるc_iの個数は先ほど求めていたため、その記録を後ろ側から累積和を求めることで、
O(1)a_kを決めたときに使えるb_ic_jのパーツの組み合わせを求めることができます。