造前缀和数组
约 10 分钟
造前缀和很简单:新开一个数组 s,让每个 s[i] 等于“前一个前缀和”加上“当前这个数”。
int a[N], s[N];
s[0] = a[0];
for (int i = 1; i < n; i++)
s[i] = s[i-1] + a[i]; // 递推:靠前一个算出当前
这样 s[i] 就是 a[0] 到 a[i] 的总和。核心是那句递推 s[i] = s[i-1] + a[i]:当前的前缀和依赖前一个 s[i-1],所以必须从左往右按顺序算,不能跳。复杂度只有 ,扫一遍就建好。
实战技巧:很多人喜欢让下标从 开始,a[0] 空着、令 s[0]=0,这样
对所有 都成立,还能让后面“区间和 s[r]-s[l-1]”在 时也不越界(s[0] 存在)。这是处理边界的常用手法。
小纸条
s[i]=s[i-1]+a[i] 里,s[i] 依赖前面的哪个值?
登录 后可看答案