news 2026/5/3 18:20:41

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 ] pre[i] = a[1] + a[2] + \dots + a[i]pre[i]=a[1]+a[2]++a[i]
特别地,定义pre[0] = 0

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

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

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

公式
s u m ( l , r ) = p r e [ r ] − p r e [ l − 1 ] sum(l, r) = pre[r] - pre[l-1]sum(l,r)=pre[r]pre[l1]

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}pre[3]pre[1]pre[3]pre[1]=1+2+3=1=(1+2+3)(1)=2+3=5

4. 复杂度

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

算法分析

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

代码实现(C++)

#include<iostream>#include<vector>usingnamespacestd;intmain(){ios::sync_with_stdio(false);cin.tie(nullptr);intn,q;cin>>n>>q;vector<longlong>pre(n+1,0);for(inti=1;i<=n;++i){longlongx;cin>>x;pre[i]=pre[i-1]+x;}while(q--){intl,r;cin>>l>>r;cout<<pre[r]-pre[l-1]<<'\n';}return0;}

总结与反思

  1. 静态区间和用前缀和是最直接且高效的模板解法。
  2. 注意区间下标从 1 开始时,pre 的边界处理。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/3 8:20:43

GPT-SoVITS语音合成终极指南:从零开始掌握AI配音技术

GPT-SoVITS语音合成终极指南&#xff1a;从零开始掌握AI配音技术 【免费下载链接】GPT-SoVITS 项目地址: https://gitcode.com/GitHub_Trending/gp/GPT-SoVITS 还在为寻找合适的语音合成工具而烦恼吗&#xff1f;&#x1f914; 今天我要为大家介绍一款真正实现"开…

作者头像 李华
网站建设 2026/5/2 8:31:56

MinerU与LayoutParser对比:表格检测精度实战评测,数据说话

MinerU与LayoutParser对比&#xff1a;表格检测精度实战评测&#xff0c;数据说话 在处理PDF文档时&#xff0c;尤其是科研论文、财报、技术手册等复杂排版文件&#xff0c;表格信息的准确提取一直是自动化流程中的“硬骨头”。传统OCR工具往往只能识别文字内容&#xff0c;却…

作者头像 李华
网站建设 2026/4/20 12:32:29

YOLO26推理卡顿?显存优化部署教程让延迟降低60%

YOLO26推理卡顿&#xff1f;显存优化部署教程让延迟降低60% 你是不是也遇到过这样的问题&#xff1a;刚部署完最新的YOLO26模型&#xff0c;信心满满地跑起推理&#xff0c;结果画面一卡一卡&#xff0c;延迟高得离谱&#xff1f;尤其是在边缘设备或显存有限的GPU上&#xff0…

作者头像 李华
网站建设 2026/4/24 12:01:28

Qwen3-Embedding-0.6B部署手册:参数配置与性能调优详解

Qwen3-Embedding-0.6B部署手册&#xff1a;参数配置与性能调优详解 1. Qwen3-Embedding-0.6B 模型简介 Qwen3 Embedding 模型系列是 Qwen 家族中专为文本嵌入和排序任务设计的最新成员。该系列基于强大的 Qwen3 密集基础模型&#xff0c;推出了多个尺寸版本&#xff08;0.6B、…

作者头像 李华
网站建设 2026/5/3 17:17:15

Saber手写笔记应用:从零开始的数字书写革命完全指南

Saber手写笔记应用&#xff1a;从零开始的数字书写革命完全指南 【免费下载链接】saber A (work-in-progress) cross-platform libre handwritten notes app 项目地址: https://gitcode.com/GitHub_Trending/sab/saber 还在为传统笔记应用的局限性而困扰吗&#xff1f;当…

作者头像 李华
网站建设 2026/5/2 2:57:41

PCSX2模拟器体验升级:从入门到精通的全方位指南

PCSX2模拟器体验升级&#xff1a;从入门到精通的全方位指南 【免费下载链接】pcsx2 PCSX2 - The Playstation 2 Emulator 项目地址: https://gitcode.com/GitHub_Trending/pc/pcsx2 还记得第一次在电脑上打开PS2模拟器时的期待吗&#xff1f;那种想要重温《王国之心》、…

作者头像 李华