ABC468 E - Sum of Average

平均の総和

考え方

全ての区間について、「その区間の合計/個数」を合計すればよい。
個数が同じものでまとめて処理することを考える。

長さ $1$ の区間は全部で $N$ 個あり、各数が $1$ 回ずつ足される。
長さ $2$ の区間は全部で $N-1$ 個あり、両端は $1$ 回ずつ、残りは $2$ 回ずつ足される。

以下同じように考えていくと、長さ $k$ の区間の総和は、以下のように求められる。

この計算は、累積和を持っておけば、各 $k$ について $O(1)$ で済む。
こうして求めた長さ $k$ の区間の総和を $k$ で割った余りを足しこんでいけば答えが得られる。
計算量は $O(N)$。

入力例2での動作

入力を受け取る。

n: 6
a: {1, 2, 3, 4, 5, 6}

累積和は次のようになる。

{0, 1, 3, 6, 10, 15, 21}

長さ $1$ の区間和の総和は $0+(21-0)=21$ となる。

長さ $2$ では、直前の $21$ に累積和を使って差分を反映し、
$21+(15-1)=35$ となる。

以降も同様に更新すると、各長さについて次の値になる。

区間長 $k$ 区間和の総和 平均の総和 $998244353$ での寄与 累積値
$1$ $21$ $21$ $21$ $21$
$2$ $35$ $35/2$ $499122194$ $499122215$
$3$ $42$ $14$ $14$ $499122229$
$4$ $42$ $21/2$ $499122187$ $63$
$5$ $35$ $7$ $7$ $70$
$6$ $21$ $7/2$ $499122180$ $499122250$

したがって、答えは $499122250$ となる。

注意点

累積和や掛け算の途中結果は、int 型からはみ出る。
long long 型を用いること。

答えは $998244353$ で割った余りを要求されているので、剰余類環の考えに従って処理する。
何か足し算や掛け算をするたびに結果を % 998244353 し、割り算は $998244353-2$ 乗したものを掛ける。
累乗計算を何度も行うため、繰り返し二乗法のアルゴリズムも用意しておくこと。

別解

特になし。