news 2026/7/29 7:07:13

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/7/17 5:02:53

NewBie-image-Exp0.1如何扩展功能?transformer模块解析教程

NewBie-image-Exp0.1如何扩展功能&#xff1f;transformer模块解析教程 1. 前言&#xff1a;为什么需要扩展NewBie-image的功能&#xff1f; 你已经用上了 NewBie-image-Exp0.1 镜像&#xff0c;跑通了 test.py&#xff0c;看到了那张清晰又富有动漫风格的生成图。是不是觉得…

作者头像 李华
网站建设 2026/7/17 16:09:03

阿里Paraformer常见问题全解,科哥镜像让部署少走弯路

阿里Paraformer常见问题全解&#xff0c;科哥镜像让部署少走弯路 1. 快速上手&#xff1a;一键部署中文语音识别系统 如果你正在寻找一个高精度、易用性强的中文语音识别&#xff08;ASR&#xff09;解决方案&#xff0c;那么阿里云推出的 Paraformer 模型无疑是一个值得尝试…

作者头像 李华
网站建设 2026/7/28 10:16:25

GitHub AI技能市场实战指南:构建高效智能工作流

GitHub AI技能市场实战指南&#xff1a;构建高效智能工作流 【免费下载链接】skills Public repository for Skills 项目地址: https://gitcode.com/GitHub_Trending/skills3/skills 在人工智能技术快速迭代的今天&#xff0c;如何让AI助手真正成为专业领域的得力助手&a…

作者头像 李华
网站建设 2026/7/19 17:38:42

如何提升语音转写准确率?试试FRCRN语音降噪镜像预处理

如何提升语音转写准确率&#xff1f;试试FRCRN语音降噪镜像预处理 语音转写看似简单&#xff0c;实则处处是坑。你是否也遇到过这些情况&#xff1a;会议录音里夹杂空调嗡鸣、视频采访中穿插键盘敲击、线上课程背景有孩子跑动声……这些看似微小的干扰&#xff0c;却能让主流A…

作者头像 李华
网站建设 2026/7/26 23:00:00

Lucide图标库:开源矢量图标工具的终极选择

Lucide图标库&#xff1a;开源矢量图标工具的终极选择 【免费下载链接】lucide Beautiful & consistent icon toolkit made by the community. Open-source project and a fork of Feather Icons. 项目地址: https://gitcode.com/GitHub_Trending/lu/lucide Lucide是…

作者头像 李华
网站建设 2026/7/27 4:10:47

Thorium浏览器终极指南:解锁Chromium隐藏性能的完整方案

Thorium浏览器终极指南&#xff1a;解锁Chromium隐藏性能的完整方案 【免费下载链接】thorium Chromium fork named after radioactive element No. 90. Windows and MacOS/Raspi/Android/Special builds are in different repositories, links are towards the top of the REA…

作者头像 李华