A Most Popular Matcha’s Snow Land (Easy)

2 secs 1024 MB
matcharate12's icon matcharate12

この問題は主に一次元imos法を問います。

Easy の解説です。
配列を用いて質問毎に毎回答えるシミュレーションをしていくと、最悪 O(N2+NQ)O(N^2+NQ) で時間制限に間に合いません。
そこで各質問を O(1)O(1) で事前に処理し、後々に累積和を用いたアルゴリズム( imos法 )を用いて実装してみます。この問題では各日にちにおいての予約数を要素とする配列 DD を定義し、これを用いて以下のように事前に処理し、累積和を用いることでそれぞれの日の予約数を合計 O(N)O(N) で求めることができます。

  • LiL_i 日目から RiR_i 日目のそれぞれに予約が 11 つずつ入る、すなわち区間 [Li,Ri)[L_i,R_i) において DLi,DLi+1,...DRiD_{L_i},D_{L_i+1},...D_{R_i}11 ずつ足していく時、DLiD_{L_i} から足していくので DLi=1D_{L_i}=1 とし、DRi+1D_{R_i+1} からは予約が 11 つ少なくなるため DRi+1=1D_{R_i+1}=-1 を格納する

また最後に予約数の最大値の導出とそのカウントですが、制約上最悪 O(NQ)O(NQ) が間に合うので愚直に探索し、愚直にカウントすればよいです。よって最初に入力する部分を含め O(M+NQ)O(M+NQ) この問題を解くことができます。

以下は解答例(C++)です。