考え方
\begin{aligned}
&\sum_{i = 1}^{M} i \times A_{k + i} \\
&=\sum_{i = 1}^{M} (k + i) \times A_{k + i} - k\sum_{i = 1}^{M} A_{k + i}
\end{aligned}
だから,累積和を2種類計算しておけば良い.&\sum_{i = 1}^{M} i \times A_{k + i} \\
&=\sum_{i = 1}^{M} (k + i) \times A_{k + i} - k\sum_{i = 1}^{M} A_{k + i}
\end{aligned}
回答例
N, M = map(int, input().split()) A = list(map(int, input().split())) acc1 = [0] for a in A: acc1.append(acc1[-1] + a) acc2 = [0] for i, a in enumerate(A): acc2.append(acc2[-1] + (i + 1) * a) ans = -1 << 60 for k in range(N - M + 1): sum1 = acc1[k + M] - acc1[k] sum2 = acc2[k + M] - acc2[k] ans = max(ans, sum2 - k * sum1) print(ans)