前缀和

10 分钟

前缀和是“用空间换时间”的经典技巧:预处理出“前 项的和”,之后任意区间和都能 算出。

定义 ,约定 。那么区间 的和就是 ——一次减法搞定,不用再循环累加。

// 下标从 1 开始, s[0] = 0
for (int i = 1; i <= n; i++)
    s[i] = s[i - 1] + a[i];

// 查询区间 [l, r] 的和
long long query(int l, int r) {
    return s[r] - s[l - 1];
}

预处理 ,每次查询 。若有 次询问,朴素做法是 ,前缀和降到 ,数据大时差距巨大。

坑:一是下标,用 时若下标从 开始要仔细推边界,推荐数组从 存、留出 ;二是和可能很大, 要开 long long 防溢出。二维前缀和同理,用容斥算矩形和。

小纸条

区间 [l, r] 的和怎么算?

登录 后可看答案

前缀和 · 考级冲刺 · op599 课程