区間等差数列加算

2 secs 1024 MB
Today03's icon Today03

全てのクエリについて、 s=0s=0 であると仮定します。

このとき、 Di=AiAi1D_i=A_i-A_{i-1} を考えると、 クエリ l r t は、 「i=l+1,l+2,...,r1i=l+1,l+2,...,r-1 について DiD_itt を、 DrD_r(rl1)×t-(r-l-1)\times t を加算する」と解釈することができます。 これは imos 法を用いることによって高速に処理できます。

続いて、 s0,t=0s\neq 0, t=0 の場合を考えます。

このときクエリ l r s は、 「i=l,l+1,...,r1i=l,l+1,...,r-1 について AiA_iss を加算する」と解釈することができます。 これも同様に imos 法を用いて高速に処理できます。

s0,t0s\neq 0, t\neq 0 の場合、 クエリ l r s t は クエリ l r s 0l r 0 t の 2 種類に分解でき、それぞれ先述のケースに帰着できます。

よって全体 O(N+Q)O(N+Q) でこの問題を解くことができました。

実装例