使用滑动窗口 + 前缀和,将窗口移动时的成本更新优化到O(1)。
当窗口从[i, i+m-1]滑动到[i+1, i+m]时:
为了迎接即将到来的2025星穹铁道演唱会,米小游团队承担了舞台的布置工作。
舞台视为一个圆柱体,等分为 n 块位置。每块位置建造台阶的成本为 ai 。
你需要在这些位置中选择连续的 m 块进行建造(由于是圆形舞台,所以位置 n 与位置 1 也是相邻的)。记这连续的 m 块成本组成数组 b={ b1,b2,...,bm },你可以按正序或逆序的顺序建造。
若按正序建造,总成本为∑j=1mj×bj;若按逆序建造,总成本为 ∑j=1mj×bm+1−j。
请计算并输出最小的建造成本。
第一行输入两个整数 n,m(1≦m≤n≦2×105) ,分别表示舞台等分块数和需要选择的块数。
第二行输入 n 个整数 a1,a2,...,an(1≦ai≦105) 表示每块建造台阶的成本。
输出一个整数,表示最小建造成本。
输入
5 3
1 4 3 1 2
输出
8
说明
在第一个样例中,选择位置 4,5,1 (对应成本 b={ 1,2,1 })时,正序逆序建造的总成本一样小,等于 1×1+2×2+3×1=8 。
输入
5 1
3 1 4 1 5
输出
1
说明
在第二个样例中,m=1 ,直接选择成本最小的块,得到最小成本 1 。