前缀和相关题目记录(未完待续...)
1 前缀和
一维前缀和是指对于一个数组 a a a,我们定义一个新的数组 s s s,其中每个元素 s [ i ] s[i] s[i] 表示从数组开头到第 i i i 个元素的累加和:
s [ i ] = a [ 1 ] + a [ 2 ] + ⋯ + a [ i ] = ∑ j = 1 i a [ j ] s[i] = a[1] + a[2] + \cdots + a[i] = \sum_{j=1}^{i} a[j] s[i]=a[1]+a[2]+⋯+a[i]=j=1∑ia[j]
通过预处理前缀和数组 s s s,我们可以快速计算任意区间 [ l , r ] [l, r] [l,r] 的和:
sum ( l , r ) = s [ r ] − s [ l − 1 ] \text{sum}(l, r) = s[r] - s[l - 1] sum(l,r)=s[r]−s[l−1]
如果 l = 1 l = 1 l=1,则 sum ( l , r ) = s [ r ] \text{sum}(l, r) = s[r] sum(l,r)=s[r]。
二维前缀和是前缀和思想的扩展,适用于矩阵。对于一个 n × m n \times m n×m 的矩阵 a a a,我们定义一个二维前缀和矩阵 s s s,其中 s [ i ] [ j ] s[i][j] s[i][j] 表示从矩阵左上角 ( 1 , 1 ) (1, 1) (1,1) 到右下角 ( i , j ) (i, j) (i,j) 的所有元素的和:
s [ i ] [ j ] = ∑ x = 1 i ∑ y = 1 j a [ x ] [ y ] s[i][j] = \sum_{x=1}^{i} \sum_{y=1}^{j} a[x][y] s[i][j]=x=1∑iy=1∑ja[x][y]
通过二维前缀和矩阵 s s s,我们可以快速计算任意子矩阵 ( x 1 , y 1 ) (x_1, y_1) (x1,y1) 到 ( x 2 , y 2 ) (x_2, y_2) (x2,y2) 的和:
s ( x 1 , y 1 , x 2 , y 2 ) = s [ x 2 ] [ y 2 ] − s [ x 1 − 1 ] [ y 2 ] − s [ x 2 ] [ y 1 − 1 ] + s [ x 1 − 1 ] [ y 1 − 1 ] {s}(x_1, y_1, x_2, y_2) = s[x_2][y_2] - s[x_1-1][y_2] - s[x_2][y_1-1] + s[x_1-1][y_1-1] s(x1,y1,x2,y2)=s[x2][y2]−s[x1−1][y2]−s[x2][y1−1]+s[x1−1][y1−1]
2 一维板子
原题链接:DP34 【模板】前缀和
给定一个长度为 n n n 的数组 a 1 , a 2 , . . . , a n a_1, a_2, ..., a_n a1,a2,...,an。接下来有 q q q 次查询,每次查询有两个参数 l , r l, r l,r。对于每个询问,请输出 a l + a l + 1 + . . . + a r a_l + a_{l+1} + ... + a_r al+al+1+...+ar。
输入描述:
第一行包含两个整数 n n n 和 q q q,第二行包含 n n n 个整数,表示 a 1 , a 2 , . . . , a n a_1, a_2, ..., a_n a1,a2,...,an。接下来 q q q 行,每行包含两个整数 l l l 和 r r r。
- 1 ≤ n , q ≤ 1 0 5 1 \leq n, q \leq 10^5 1≤n,q≤105
- − 1 0 9 ≤ a [ i ] ≤ 1 0 9 -10^9 \leq a[i] \leq 10^9 −109≤a[i]≤109
- 1 ≤ l ≤ r ≤ n 1 \leq l \leq r \leq n 1≤l≤r≤n
输出描述:
输出 q q q 行,每行代表一次查询的结果。
示例:
input:
3 2
1 2 4
1 2
2 3
output:
3
6
#include <iostream>
#include <vector>
using namespace std;#define endl '\n'
#define LL long longvector<LL> a(101010, 0);
vector<LL> s(101010, 0);int main()
{int n, q;cin >> n >> q;for (int i = 1; i <= n; i++) {cin >> a[i];s[i] = s[i - 1] + a[i];}while (q--) {int l, r;cin >> l >> r;cout << s[r] - s[l - 1] << endl;}return 0;
}
时间复杂度: 预处理前缀和数组的时间复杂度为 O ( n ) O(n) O(n),每次查询的时间复杂度为 O ( 1 ) O(1) O(1)
3 二维板子
原题链接:DP35 【模板】二维前缀和
给你一个 n n n 行 m m m 列的矩阵 A A A,下标从1开始。接下来有 q q q 次查询,每次查询输入4个参数 x 1 x_1 x1, y 1 y_1 y1, x 2 x_2 x2, y 2 y_2 y2。请输出以 ( x 1 , y 1 ) (x_1, y_1) (x1,y1) 为左上角, ( x 2 , y 2 ) (x_2, y_2) (x2,y2) 为右下角的子矩阵的和。
输入描述:
第一行包含三个整数 n n n, m m m, q q q。
接下来 n n n 行,每行 m m m 个整数,代表矩阵的元素。
接下来 q q q 行,每行4个整数 x 1 x_1 x1, y 1 y_1 y1, x 2 x_2 x2, y 2 y_2 y2,分别代表这次查询的参数。
- 1 ≤ n , m ≤ 1000 1 \leq n, m \leq 1000 1≤n,m≤1000
- 1 ≤ q ≤ 1 0 5 1 \leq q \leq 10^5 1≤q≤105
- − 1 0 9 ≤ a [ i ] [ j ] ≤ 1 0 9 -10^9 \leq a[i][j] \leq 10^9 −109≤a[i][j]≤109
- 1 ≤ x 1 ≤ x 2 ≤ n 1 \leq x_1 \leq x_2 \leq n 1≤x1≤x2≤n
- 1 ≤ y 1 ≤ y 2 ≤ m 1 \leq y_1 \leq y_2 \leq m 1≤y1≤y2≤m
输出描述:
输出 q q q 行,每行表示查询结果。
示例
输入:
3 3 2
1 2 3
4 5 6
7 8 9
1 1 2 2
2 2 3 3
输出:
12
26
#include <iostream>using namespace std;long long a[1010][1010];
long long s[1010][1010];int main()
{int n, m, q;cin >> n >> m >> q;for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {cin >> a[i][j];}}for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {s[i][j] = s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1] + a[i][j];}}int x1, x2, y1, y2;while (q--) {cin >> x1 >> y1 >> x2 >> y2;cout << s[x2][y2] - s[x1 - 1][y2] - s[x2][y1 - 1] + s[x1 - 1][y1 - 1] << endl;}return 0;
}
习题1:724.寻找数组中心下标 - e
724.寻找数组的中心下标 - easy
#include <iostream>
#include <vector>
using namespace std;/*
https://leetcode.cn/problems/find-pivot-index/description/
正常思路应该是:
2 * left_sum = sumclass Solution {
public:int pivotIndex(vector<int>& nums) {int sum = reduce(nums.begin(), nums.end());int left = 0;for (int i = 0; i < nums.size(); i++) {if (2 * left == sum - nums[i]) {return i;}left += nums[i];}return -1;}
};*/class Solution {
public:int pivotIndex(vector<int>& nums){int n = nums.size();if (n == 0)return -1;// 前缀和数组,dp1[i] 表示 nums[0] 到 nums[i-1] 的和vector<int> dp1(n + 1, 0); // 后缀和数组,dp2[i] 表示 nums[i+1] 到 nums[n-1] 的和vector<int> dp2(n + 1, 0); for (int i = 1; i <= n; ++i) {dp1[i] = dp1[i - 1] + nums[i - 1];}for (int i = n - 1; i >= 0; --i) {dp2[i] = dp2[i + 1] + nums[i];}for (int i = 0; i < n; ++i) {if (dp1[i] == dp2[i + 1]) {return i;}}return -1;}
};int main()
{vector<int> nums = { 1, 7, 3, 6, 5, 6 };Solution sol;int ans = sol.pivotIndex(nums);cout << ans << endl;
}
习题2:303.区域和检索数组不可变 - e
303. 区域和检索 - 数组不可变 - easy
// https://leetcode.cn/problems/range-sum-query-immutable/
#include <iostream>
#include <vector>
using namespace std;
class NumArray {vector<int> s;
public:NumArray(vector<int>& nums){s.resize(nums.size() + 1);for (int i = 0; i < nums.size(); i++) {s[i + 1] = s[i] + nums[i];}}int sumRange(int left, int right){return s[right + 1] - s[left];}
};
习题3:238.除自身以外数组的乘积 - m
238. 除自身以外数组的乘积 - m
/* https://leetcode.cn/problems/product-of-array-except-self/description/ */#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:vector<int> productExceptSelf(vector<int>& nums){int n = nums.size();vector<int> ans(n, 1);for (int i = 1; i < n; i++)ans[i] = ans[i - 1] * nums[i - 1];int suffix = 1;for (int i = n - 1; i >= 0; i--) {ans[i] = ans[i] * suffix;suffix *= nums[i];}return ans;}
};int main()
{vector<int> nums1 = { 1, 2, 3, 4 };Solution sol;vector<int> result1 = sol.productExceptSelf(nums1);for (int num : result1) {cout << num << " ";}cout << endl;
}/*class Solution {
public:vector<int> productExceptSelf(vector<int>& nums) {int n = nums.size();vector<int> pre(n, 1);for (int i = 1; i < n; i++) {pre[i] = pre[i - 1] * nums[i - 1];}vector<int> suf(n, 1);for (int i = n - 2; i >= 0; i--) {suf[i] = suf[i + 1] * nums[i + 1];}vector<int> ans(n);for (int i = 0; i < n; i++) {ans[i] = pre[i] * suf[i];}return ans;}
};*/
习题4:

相关文章:
前缀和相关题目记录(未完待续...)
1 前缀和 一维前缀和是指对于一个数组 a a a,我们定义一个新的数组 s s s,其中每个元素 s [ i ] s[i] s[i] 表示从数组开头到第 i i i 个元素的累加和: s [ i ] a [ 1 ] a [ 2 ] ⋯ a [ i ] ∑ j 1 i a [ j ] s[i] a[1] a[2] \…...
Https解决了Http的哪些问题
部分内容来源:小林coding 详细解析 Http的风险 HTTP 由于是明文传输,所以安全上存在以下三个风险: 1.窃听风险 比如通信链路上可以获取通信内容,用户号容易没。 2.篡改风险 比如强制植入垃圾广告,视觉污染&#…...
OpenCV给图像添加噪声
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 如果你已经有了一张干净的图像,并希望通过编程方式向其添加噪声,可以使用 OpenCV 来实现这一点。以下是一个简单的例子&a…...
湖北中医药大学谱度众合(武汉)生命科技有限公司研究生工作站揭牌
2025年2月11日,湖北中医药大学&谱度众合(武汉)生命科技有限公司研究生工作站揭牌仪式在武汉生物技术研究院一楼101会议室举行,湖北中医药大学研究生院院长刘娅教授、基础医学院院长孔明望教授、基础医学院赵敏教授、基础医学院…...
欢乐力扣:快乐数
文章目录 1、题目描述2、思路1代码 1、题目描述 快乐数。 编写一个算法来判断一个数 n 是不是快乐数。 快乐数定义为:对于一个正整数,每次不断将其转化成 每位数字的平方和。 判断是否最终和会为1,是1就是快乐数,否则不是。 …...
【聊天室后端服务器开发】功能设计-框架与微服务
服务器功能设计 微服务思想应用 微服务架构 主要组成分析 客户端 客户端通过 HTTP 协议与网关进行交互,进行操作如用户注册、好友申请等客户端只需要知道网关的地址,无需关心后端服务的具体实现 网关 作为系统的统一入口,网关负责接收客…...
国标28181协议在智联视频超融合平台中的接入方法
一. 国标28181介绍 国标 28181 协议全称是《安全防范视频监控联网系统信息传输、交换、控制技术要求》,是国内视频行业最重要的国家标准,目前有三个版本: 2011 年:推出 GB/T 28181-2011 版本,为安防行业的前端设备、平…...
让网页“浪“起来:打造会呼吸的波浪背景
每次打开那些让人眼前一亮的网页时,你是否有注意到那些看似随波逐流的动态背景?今天咱们不聊高深的技术,就用最朴素的CSS,来解锁这个让页面瞬间鲜活的秘籍。无需JavaScript,不用复杂框架,准备好一杯咖啡&am…...
linux-多进程基础(1) 程序、进程、多道程序、并发与并行、进程相关命令,fork
程序是什么 程序是包含一系列信息的文件。这些信息描述了如何在运行时创建一个进程,包含二进制格式标识、机器语言指令、程序入口地址、数据、符号表及重定位表、共享库信息及其他信息 二进制格式标识,每个程序包含了描述可执行文件的元信息(是否可读之…...
美颜相机1.0
项目开发步骤 1 界面开发 美颜相机界面构成: 标题 尺寸 关闭方式 位置 可视化 2 创建主函数调用界面方法 3 添加两个面板 一个是按钮面板一个是图片面板 用JPanel 4 添加按钮到按钮面吧【注意:此时要用初始化按钮面板的方法initBtnPanel 并且将按钮添…...
Docker内存芭蕾:优雅调整容器内存的极限艺术
title: “💾 Docker内存芭蕾:优雅调整容器内存的极限艺术” author: “Cjs” date: “2025-2-23” emoji: “🩰💥📊” 当你的容器变成内存吸血鬼时… 🚀 完美内存编排示范 📜 智能内存管家脚本…...
gitlab初次登录为什么登不上去
今天又写了一次gitlab安装后,第一次登录的问题。 gitlab工作笔记_gitlab默认用户名密码-CSDN博客 因为又掉这个坑里了。 # 为什么第一次登录这么难? 第一是因为gitlab启动的时间很长,有时候以为装错了。 第二是初始密码,如果…...
单链表相关操作(基于C语言)
文章目录 单链表定义版本一(可自己选择是否含头节点)创建单链表打印单链表对单链表进行冒泡排序删除单链表中值为key的节点求单链表表长在单链表位序为i的位置插入新元素e 单链表定义 typedef struct node {int data;struct node* next; }LinkNode,*LinkList;版本一(可自己选择…...
SPRING10_SPRING的生命周期流程图
经过前面使用三大后置处理器BeanPostProcessor、BeanFactoryPostProcessor、InitializingBean对创建Bean流程中的干扰,梳理出SPRING的生命周期流程图如下...
从零到一学习c++(基础篇--筑基期十一-类)
从零到一学习C(基础篇) 作者:羡鱼肘子 温馨提示1:本篇是记录我的学习经历,会有不少片面的认知,万分期待您的指正。 温馨提示2:本篇会尽量用更加通俗的语言介绍c的基础,用通俗的语言去…...
Java String 类
Java String 类常用方法详解 在 Java 编程里,字符串操作十分常见,而 String 类作为 Java 标准库的核心类,用于表示不可变的字符序列。任何对字符串的修改操作都会返回一个新的字符串对象,不会改变原始字符串。本文将详细介绍 Str…...
P8665 [蓝桥杯 2018 省 A] 航班时间
P8665 [蓝桥杯 2018 省 A] 航班时间 题目代码分析 题目 代码 #include <iostream> #include <vector> #include <string> #include <algorithm> #include <math.h> #include <queue>#include <cctype> using namespace std; int t;…...
Vue3项目与pnpm使用教程
文章目录 Vue3项目与pnpm使用教程一、pnpm简介二、安装pnpm三、创建Vue3项目四、运行Vue3项目五、管理项目依赖六、配置pnpm七、使用pnpm的额外功能八、总结 Vue3项目与pnpm使用教程 一、pnpm简介 pnpm是一个高性能的Node.js包管理工具,相较于npm和yarn࿰…...
C++初阶——简单实现list
目录 1、前言 2、List.h 3、Test.cpp 1、前言 1. 简单实现std::list,重点:迭代器,类模板,运算符重载。 2. 并不是,所有的类,都需要深拷贝,像迭代器类模板,只是用别的类的资源&am…...
C/C++后端开发面经
字节跳动 客户端开发 实习 一面(50min) 自我介绍是否愿意转语言,是否只愿意搞后端选一个项目来详细谈谈HTTP和HTTPS有什么区别?谈一下HTTPS加密的具体过程: 非对称加密 对称加密 证书认证的方式 非对称加密是为了保证对称密钥的安全性。 对称…...
智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...
