当前位置: 首页 > news >正文

前缀和算法 cpp


4. 前缀和

前缀和与差分的核心思想就是预处理, 可以在暴力枚举的过程中, 可以快速给出查询结果, 从而优化结果, 从而优化时间复杂度

是经典的用空间替换时间的做法

4.1 一维前缀和

[牛客网]【模板】前缀和

思路:

前缀和 -> 快速求出数组中, 某一段的区间和
O(1)

  1. 先预处理出来一个前缀和数组
    f[i]表示: 区间[1, i]中, 所有元素的和
    f[i] = f[i-1] + a[i]
  2. 利用前缀和数组求和
代码:

暴力解法 -> 模拟

#include<bits/stdc++.h>usingnamespacestd;constintN=1e6+10;intm,n;inta[N];intl,r;intmain(){cin>>n>>m;for(inti=0;i<n;i++)cin>>a[i];while(m--){cin>>l>>r;intsum=0;for(inti=l-1;i<r;i++){sum+=a[i];}cout<<sum<<endl;}return0;}

部分测试用例会超时

前缀和 -> 快速求出数组中, 某一段的区间和

#include<bits/stdc++.h>usingnamespacestd;constintN=1e6+10;intm,n;longlonga[N];intl,r;longlongf[N];//前缀和数组intmain(){cin>>n>>m;for(inti=1;i<=n;i++)cin>>a[i];for(inti=1;i<=n;i++)f[i]=f[i-1]+a[i];while(m--){cin>>l>>r;cout<<f[r]-f[l-1]<<endl;}return0;}

4.2 最大子段和

[!洛谷]

P1115 最大子段和

P1115 最大子段和 - 洛谷

题目描述

给出一个长度为n nn的序列a aa,选出其中连续且非空的一段使得这段和最大。

输入格式

第一行是一个整数,表示序列的长度n nn

第二行有n nn个整数,第i ii个整数表示序列的第i ii个数字a i a_iai

输出格式

输出一行一个整数表示答案。

输入输出样例 #1

输入 #1

7 2 -4 3 -1 2 -4 3

输出 #1

4

说明/提示

样例 1 解释

选取[ 3 , 5 ] [3, 5][3,5]子段{ 3 , − 1 , 2 } \{3, -1, 2\}{3,1,2},其和为4 44

数据规模与约定
  • 对于40 % 40\%40%的数据,保证n ≤ 2 × 10 3 n \leq 2 \times 10^3n2×103
  • 对于100 % 100\%100%的数据,保证1 ≤ n ≤ 2 × 10 5 1 \leq n \leq 2 \times 10^51n2×105− 10 4 ≤ a i ≤ 10 4 -10^4 \leq a_i \leq 10^4104ai104

2026/01/21:增加一组 hack 数据。

思路:

利用前缀和

  1. 找以a[i]为结尾的所有子区间中 最大的子段和
  2. f[i]减去[1, i-1]中所有前缀和最小值 = 以a[i]为结尾最大值
代码:
#include<bits/stdc++.h>usingnamespacestd;typedeflonglongLL;constintN=2e5+10;intn;LL f[N];//前缀和数组intmain(){cin>>n;for(inti=1;i<=n;i++){LL x;cin>>x;f[i]=f[i-1]+x;}LL ret=-1e20;LL prevmin=0;for(inti=1;i<=n;i++){ret=max(ret,f[i]-prevmin);prevmin=min(prevmin,f[i]);}cout<<ret<<endl;return0;}

注意题目中的数据范围
prev是前驱的意思


http://www.jsqmd.com/news/500411/

相关文章:

  • 5分钟本地跑起大模型
  • 从“笔耕不辍”到“智绘蓝图”:书匠策AI如何重塑问卷设计新生态?
  • 服务器安装向量数据库-Docker版本
  • Claude AI编程实战 的32 个技巧,建议收藏
  • OpenClaw树莓派摄像头任务测试
  • [具身智能-21]:深度解析:ROS 2 (底层) + Android (上层) 双系统架构
  • 构建高效能团队:研发效能平台如何赋能企业创新?
  • 学习java第2天
  • 《防雷设计不止于“避雷针”:沃虎PoE++防护方案如何实现供电与数据的“双冗余安全”》
  • 关于Linux中的日志问题
  • 塔讯总线协议转换信捷 PLC 对接 TCP/IP 设备实战方案
  • 盘点2026年最靠谱的京东e卡回收渠道 - 团团收购物卡回收
  • 锂电池测试设备采集到本地数据库的解决方案
  • 2025-2026降AI率工具12家实测:学生党零成本最优解是它
  • AI外呼破局|成人教育降本关键,告别高转化成本
  • 千匠网络B2B软件开发:定制化赋能企业数字化交易闭环
  • 欧盟小额包裹监管趋严低客单模式如何调整才能不亏
  • AI辅助氢氧切割,助力工业企业零碳转型
  • LVGL9.5在VScode中安装模拟器
  • 【云原生】Helm应用商店
  • Avalonia的生命周期 之一
  • day55 代码随想录算法训练营 图论专题9
  • 软件质量概念、八大质量模型特征、影响质量的因素
  • LLM 节点调参-AI不再胡扯
  • QtCreator开发软件使用小技巧
  • CD147(分化簇147):作用机制、上市药物与未来研发趋势
  • JavaScript基础课程十三、ES6+ 核心语法(三)——数组与对象高级方法
  • 2025年年终总结之17.教育之文化的意义
  • LangChain4j AI Services 深度解析:声明式 API 与接口驱动开发
  • 企业私域运营全指南:从 0 到 10 万用户,可复制的全链路实操手册