2026-01-21-牛客每日一题-静态区间和(前缀和)


title: 2026-01-21-牛客每日一题-静态区间和(前缀和)

date: 2026-01-21

tags:

  • 算法学习
  • 牛客
  • 前缀和

题目信息

  • 平台:牛客
  • 题目:【模板】静态区间和(前缀和)
  • 难度:简单(模板)
  • 题目链接

题目描述

给定长度为 n 的数组和 q 次查询,每次给出区间 l, r,输出该区间元素之和。数组不修改。


初步思路

1. 朴素做法

如果每次查询都直接遍历区间 [l, r] 求和,时间复杂度为 O(n)。对于 q 次查询,总时间复杂度为 O(nq)。

2. 前缀和优化

我们需要快速求出区间和,利用前缀和 可以将区间查询优化到 O(1)。

定义 :

令 pre[i] 表示数组前 i 个元素的和,即:
p r e i = a 1 + a 2 + ⋯ + a i prei = a1 + a2 + \dots + ai prei=a1+a2+⋯+ai

特别地,定义 pre[0] = 0。

推导区间和 :

我们需要求区间 [l, r] 的和:
s u m ( l , r ) = a l + a l + 1 + ⋯ + a r sum(l, r) = al + al+1 + \dots + ar sum(l,r)=al+al+1+⋯+ar

我们可以用 pre[r] 减去 pre[l-1] 来得到:

  • pre[r] 包含了 a[1]...a[r]
  • pre[l-1] 包含了 a[1]...a[l-1]
  • 相减后,1 到 l-1 部分着消,剩下 l 到 r 部分。

公式 :
s u m ( l , r ) = p r e r − p r e l − 1 sum(l, r) = prer - prel-1 sum(l,r)=prer−prel−1

3. 一个例子

以数组 a = [1, 2, 3, 4, 5] 为例:

  • pre[3] = 1 + 2 + 3 = 6
  • pre[1] = 1

我们要求区间 [2, 3] 的和,即 a[2] + a[3] = 2 + 3 = 5。

根据公式 sum(2, 3) = pre[3] - pre[1]:
pre 3 = 1 + 2 + 3 pre 1 = 1 pre 3 − pre 1 = ( 1 + 2 + 3 ) − ( 1 ) = 2 + 3 = 5 \begin{aligned} \text{pre}3 &= 1 + 2 + 3 \\ \text{pre}1 &= 1 \\ \text{pre}3 - \text{pre}1 &= (1 + 2 + 3) - (1) \\ &= 2 + 3 \\ &= 5 \end{aligned} pre3pre1pre3−pre1=1+2+3=1=(1+2+3)−(1)=2+3=5

4. 复杂度

  • 预处理:O(n)
  • 每次查询:O(1)
  • 总时间复杂度:O(n + q)

算法分析

  • 核心:前缀和转化区间求和
  • 技巧:pre0 = 0,使用 long long 防止溢出
  • 时间复杂度:O(n + q)
  • 空间复杂度:O(n)

代码实现(C++)

cpp 复制代码
#include <iostream>
#include <vector>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n, q;
    cin >> n >> q;

    vector<long long> pre(n + 1, 0);
    for (int i = 1; i <= n; ++i) {
        long long x;
        cin >> x;
        pre[i] = pre[i - 1] + x;
    }
    while (q--) {
        int l, r;
        cin >> l >> r;
        cout << pre[r] - pre[l - 1] << '\n';
    }
    return 0;
}

总结与反思

  1. 静态区间和用前缀和是最直接且高效的模板解法。
  2. 注意区间下标从 1 开始时,pre 的边界处理。
相关推荐
欢欢李8 小时前
【LTE L3 笔记 06】LTE下行参考信号
笔记·无线通信·物理层·lte·空口协议
机器人零零壹13 小时前
技术白皮书:iRobotCAM如何解决机器人激光切割应用中的核心难点,从CAD离线编程到双目视觉定位与轨迹自适应提升复杂空间曲线切割的精度、效率与柔性化水平
人工智能·算法
ZhengEnCi16 小时前
大模型的分类到底怎么分:从基础模型到推理模型、从通用到专用的完整图谱
算法
前进的李工16 小时前
Agent 学习笔记 05:系统提示词应该怎么写
笔记·学习·prompt·agent·个人开发·few-shot·ai应用开发
取名真是16 小时前
Python 算法知识点从基础到进阶
开发语言·python·算法
罗西的思考17 小时前
【轻量化复刻大模型 / KIMI K3】KDA 模块交互式演示
人工智能·算法·机器学习
蒸蒸yyyyzwd18 小时前
后端学习笔记三个知识
笔记·八股
nm_zfyjt19 小时前
信息流广告投放优化实践:线索成本评估模型与转化链路重构(家装建材案例)
算法·重构·内蒙古朋友圈广告服务商·内蒙古朋友圈获客
w_zero_one20 小时前
算法--构造
java·数据结构·算法
其实防守也摸鱼20 小时前
信创安全竞赛知识总结与题库
大数据·网络·人工智能·算法·安全·php