news 2026/9/5 15:22:40

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/8/31 15:35:30

机器学习监控工具如何帮你避免模型部署的坑?

机器学习监控工具如何帮你避免模型部署的坑&#xff1f; 【免费下载链接】evidently Evaluate and monitor ML models from validation to production. Join our Discord: https://discord.com/invite/xZjKRaNp8b 项目地址: https://gitcode.com/GitHub_Trending/ev/evidentl…

作者头像 李华
网站建设 2026/9/3 11:13:00

iOS应用包获取终极指南:IPATool命令行工具完整教程

iOS应用包获取终极指南&#xff1a;IPATool命令行工具完整教程 【免费下载链接】ipatool Command-line tool that allows searching and downloading app packages (known as ipa files) from the iOS App Store 项目地址: https://gitcode.com/GitHub_Trending/ip/ipatool …

作者头像 李华
网站建设 2026/8/30 3:20:28

AI听懂情绪了?SenseVoiceSmall真实体验分享

AI听懂情绪了&#xff1f;SenseVoiceSmall真实体验分享 最近在测试一款语音识别模型时&#xff0c;我第一次真切地感受到&#xff1a;AI真的开始“听懂”人类说话时的情绪了。这不是科幻电影的桥段&#xff0c;而是基于阿里开源的 SenseVoiceSmall 模型实现的真实能力。它不仅…

作者头像 李华
网站建设 2026/9/3 6:01:30

Open-Meteo 开源天气API:免费搭建个人天气服务的终极指南

Open-Meteo 开源天气API&#xff1a;免费搭建个人天气服务的终极指南 【免费下载链接】open-meteo Free Weather Forecast API for non-commercial use 项目地址: https://gitcode.com/GitHub_Trending/op/open-meteo 还在为商业天气API的高昂费用发愁吗&#xff1f;想要…

作者头像 李华
网站建设 2026/9/2 22:08:39

如何监控Sambert运行状态?GPU利用率实时查看部署技巧

如何监控Sambert运行状态&#xff1f;GPU利用率实时查看部署技巧 1. 引言&#xff1a;为什么需要监控Sambert的运行状态&#xff1f; 你有没有遇到过这种情况&#xff1a;启动了语音合成服务&#xff0c;输入文字后却迟迟没有声音输出&#xff0c;界面卡在“生成中”……这时…

作者头像 李华
网站建设 2026/8/24 11:57:29

Cap开源录屏工具:重新定义屏幕录制的艺术与科学

Cap开源录屏工具&#xff1a;重新定义屏幕录制的艺术与科学 【免费下载链接】Cap Effortless, instant screen sharing. Open-source and cross-platform. 项目地址: https://gitcode.com/GitHub_Trending/cap1/Cap 在数字化时代&#xff0c;屏幕录制已成为教育、工作和…

作者头像 李华