公式

E - Sum of Subarrays 解説 by cn449


AjA_j に対し、式 l=LiRir=lRij=lrAj\displaystyle\sum_{l = L_i}^{R_i}\sum_{r = l}^{R_i}\sum_{j = l}^{r} A_jAjA_j が足される回数を考えます。

j<Lij < L_i または Ri<jR_i < j のときは AjA_j は足されないので、LijRiL_i \leq j \leq R_i なる jj についてのみ考えます。

AjA_jljrl \leq j \leq r のとき 11 度ずつ足されるので、AjA_j が足される回数の合計は LiljrRiL_i \leq l \leq j \leq r \leq R_i を満たす整数組 (l,r)(l, r) の数に等しいです。

LiljL_i \leq l \leq j なる整数 lljLi+1j - L_i + 1 個、jrRij \leq r \leq R_i なる整数 rrRij+1R_i - j + 1 個であることから、上の条件を満たす整数組 (l,r)(l, r) の個数は (jLi+1)(Rij+1)(j - L_i + 1)(R_i - j + 1) です。

したがって、求める式の値は j=LiRi(jLi+1)(Rij+1)Aj\displaystyle\sum_{j = L_i}^{R_i} (j - L_i + 1)(R_i - j + 1)A_j であり、展開すると j=LiRij2Aj+(Li+Ri)jAj+(Li+1)(Ri+1)Aj\displaystyle\sum_{j = L_i}^{R_i} -j^2A_j + (L_i + R_i)jA_j + (-L_i + 1)(R_i + 1)A_j となります。

これにより、クエリが 11 つの場合は上式を用いて O(N)O(N) 時間で計算できます。

QQ 個のクエリに対応するためには、j2Aj,jAj,Ajj^2A_j, jA_j, A_j の累積和を持っておき、区間和を取ったのちに係数を掛け合わせて和を取ればよいです。

投稿日時:
最終更新:



2026-08-01 (土)
09:51:50 +09:00