前缀和(一)

前缀和

一维前缀和数组

假设有一个数组为a [ n ] , 另一个数组为s [ n ] .

其中 s [ j ]= a[1] +a[ 2 ]+ ......+a[ j-1] +a [ j ] 。--->s[ j ]表示a数组从第一个元素到第 j 个元素之和,那么我们则就称 s 数组为前缀和数组

 例题:前缀和

链接:

795. 前缀和 - AcWing题库

 大体思路:

构造出前缀和数组 s然后进行 [ l, r ] 区间的查询, [ l, r ] 区间的数据总和为:s [ r ] - s [ l - 1 ]

之所以是s [ r ] - s [ l - 1 ]  --->s[ r ]= a[ 1 ] +a [ 2 ] +....+a[ r-1 ]+a[ r ]

s [ l-1 ]= a[ 1 ] +a [ 2 ] +....+a[ l-2 ]+a[ l-1 ] ,那么两式相减刚好就是[ l, r ] 区间的数据总和

这里我们让数据从数组下标为1的开始往后面去放 ,为了避免处理边界问题(二维前缀和中会有很大的作用)

 代码实现
#include<iostream>
#include<vector>
using namespace std;int main()
{int n,m;scanf("%d %d",&n,&m);vector<int> q(n+1);for(int i=1;i<=n;i++) scanf("%d",&q[i]);vector<int> sum(n+1);sum[0]=0;for(int i=1;i<=n;i++){sum[i]=sum[i-1]+q[i];//初始化前缀和数组}while(m--){int l,r;scanf("%d %d",&l,&r);printf("%d\n",sum[r]-sum[l-1]);}
}

 二维前缀和数组

前提知识:a [ i ] [ j ]为原数组 ,s [ i ][ j ]表示从( 0 ,0 )这个位置到( i , j )所有数据之和

那么s [ i ] [ j ]=s [ i-1 ] [ j ]+s[ i ] [ j-1 ]- s[ i-1 ] [ j-1 ]+ a[ i ] [ j ]

减s[ i-1 ] [ j-1 ] --->因为前面加s [ i-1 ] [ j ]和s[ i ] [ j-1 ] ,多加了一个s[ i-1 ] [ j-1 ]

例题:子矩阵的和

链接:

796. 子矩阵的和 - AcWing题库

 大体思路
  • 先构建好二维前缀和数组s[ i ] [ j ]  
  • 然后根据给出的二个坐标 ( x1 , y1 ) ( x2, y2 ) 去这个子矩阵
  • 那么这个子矩阵的和为 s [ x2 ,y2 ] - s [ x2 , y1-1 ] - s[ x1-1 ] [ y2 ] + s[ x1-1 ] [ y1-1 ]

 子矩阵的和为 s [ x2 ,y2 ] - s [ x2 , y1-1 ] - s[ x1-1 ] [ y2 ] + s[ x1-1 ] [ y1-1 ]

要加上s[ x1-1 ] [ y1-1 ] ----->因为当我们减去(s [ x2 , y1-1 ] + s[ x1-1 ] [ y2 ] )此刻,多减了一个s[ x1-1 ] [ y1-1 ] , 

 我们在创建前缀和数组时,多开一行,多开一列

 代码实现
#include<iostream>
#include<vector>
using namespace std;int main()
{int n,m,q;scanf("%d %d %d",&n,&m,&q);vector<vector<int> > arr(n+1,vector<int>(m+1));for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){scanf("%d",&arr[i][j]);}}vector<vector<int> > s(n+1,vector<int>(m+1,0));//s[i][j]--表示从(1,1)到(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]+arr[i][j];}}while(q--){int x1,y1,x2,y2;scanf("%d %d %d %d",&x1,&y1,&x2,&y2);cout<<s[x2][y2]-s[x1-1][y2]-s[x2][y1-1]+s[x1-1][y1-1]<<endl;}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/767993.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue v-if v-show 区别

Vue中的v-if和v-show都用于控制元素的显示和隐藏&#xff0c;但它们之间存在一些关键的区别。 渲染方式&#xff1a;v-if是“惰性”的&#xff0c;这意味着在条件为假时&#xff0c;相关的组件或元素的所有事件监听器和子组件都会被销毁&#xff0c;不会渲染到DOM中。只有当条…

遥感原理与应用—绪论

一、关于基本概念与对应的英文 遥感&#xff1a;Remote Sensing 遥测&#xff1a;Telemetry&#xff0c;对被测物体某些运动参数和性质进行远距离测量的技术&#xff0c;分为接触测量与非接触测量&#xff0c;对于RS的概念&#xff0c;遥测探测的目标显得狭隘了一些&#xff…

AI女朋友 -- 一个傲娇女友,嘴上刻薄但内心关心你

文章目录 前言一、成果展示 1、ai女友2、留言板二、实现思路三、难点问题四、总结 前言 在免费API寻找过程中&#xff0c;发现了ai女友的接口&#xff0c;打算从这个接口入手&#xff0c;做出给人一种有女朋友的、温柔的、亲近的、容易给的感觉&#xff01; 一、成果展示 1、A…

Git bash获取ssh key

目录 1、获取密钥 2、查看密钥 3、在vs中向GitHub推送代码 4、重新向GitHub推送修改过的代码 1、获取密钥 指令&#xff1a;ssh-keygen -t rsa -C "邮箱地址" 连续按三次回车&#xff0c;直到出现类似以下界面&#xff1a; 2、查看密钥 路径&#xff1a;C:\U…

Kubernetes概念:工作负载:工作负载管理:2. ReplicaSet

ReplicaSet ReplicaSet 的目的是维护一组在任何时候都处于运行状态的 Pod 副本的稳定集合。 因此&#xff0c;它通常用来保证给定数量的、完全相同的 Pod 的可用性。 ReplicaSet 的工作原理 ReplicaSet 是通过一组字段来定义的&#xff0c;包括一个用来识别可获得的 Pod 的集…

FreeCAD傻瓜教程之基准面的构建-在实体的表面上新建坐标、倾斜的平面、附加不同的台阶、旋转体等

目的&#xff1a;学会在已有模型的不同剖面上建立新的坐标系&#xff0c;并绘图&#xff1b;使得新图形仍然作为同一个零件实体的构件。 零、需求举例 在下列模型中&#xff0c;我们要在圆杆的顶部增加一个把手&#xff0c;如果点击圆杆顶部&#xff0c;则仅能在顶部圆形所在…

JVM虚拟机栈

虚拟机栈 虚拟机栈概述 栈是运行时的单位&#xff0c;而堆是存储的单位。 栈解决程序的运行问题&#xff0c;即程序如何执行&#xff0c;或者说如何处理数据。堆解决的是数据存储的问题&#xff0c;即数据怎么放&#xff0c;放在那儿。 虚拟机栈的基本内容 Java虚拟机栈 Java…

瑞吉外卖实战学习--登录功能的开发

登录功能的开发 前端1、创建实体类Employee和employee表进行映射,可以直接导入资料中提供的实体类1.1、字段名称对应上&#xff0c;有下划线的使用驼峰对应&#xff0c;因为在配置文件中进行了配置1.2、employee 文件 2、创建Controller、Service、Mapper2.1、Mapper文件2.2、定…

Windows复现SiamCAR代码遇到的报错与解决方法

一、环境基础 Windows10以上 已装Anaconda 支持GPU 已经gitclone:https://github.com/HonglinChu/SiamTrackers 二、遇到的报错 1. No module named pycocotools._mask 方案一&#xff1a;加载非常慢 conda install -c conda-forge pycocotools 方…

蓝桥杯竞赛规则及说明【C/C++】

第十五届蓝桥杯全国软件和信息技术专业人才大赛个人赛规则解析 一、组别划分 本次大赛C/C和Java两个语言分别设有四个组别:研究生组、大学A组、大学B组和大学C组。选手只能选择参加其中一个组别的竞赛,各组评奖独立进行。 组别资格对应如下: 研究生组:只限研究生参加大学A组…

vite打包配置基础

Vite&#xff1a;优化前端打包的利器 Vite&#xff08;法语意为“快速”&#xff09;是由 Vue.js 之父尤雨溪开发的一款现代化的前端构建工具&#xff0c;其设计目标是通过提供更快的冷启动速度、更高效的热更新和智能的按需编译打包机制&#xff0c;极大地提升前端开发体验。…

智慧物联-能源分析平台

物联能源分析平台是为了满足企业对能源管理和节能减排的需求而开发的一套在线平台。随着能源问题日益凸显&#xff0c;企业对能源的使用和管理面临着越来越大的挑战。因此&#xff0c;开发一个能够帮助企业实时监测、分析和优化能源消耗的平台变得尤为重要。 随着工业化和城市…

Java-JVM指令

JVM指令 1. 栈和局部变量操作 1.1 将常量压入栈的指令aconst_null 将null对象引用压入栈 iconst_m1 将int类型常量-1压入栈 iconst_0 将int类型常量0压入栈 iconst_1 将int类型常量1压入栈 iconst_2 将int类型常量2压入栈 iconst_3 将int类型常量3压入栈 iconst_4 将int类型…

C++面向对象整理(7)之运算符重载、operator关键字

C面向对象整理&#xff08;7&#xff09;之运算符重载、operator关键字 注&#xff1a;整理一些突然学到的C知识&#xff0c;随时mark一下 例如&#xff1a;忘记的关键字用法&#xff0c;新关键字&#xff0c;新数据结构 C 的 类的运算符重载 C面向对象整理&#xff08;7&#…

力扣3. 无重复字符的最长子串

Problem: 3. 无重复字符的最长子串 文章目录 题目描述思路及解法复杂度Code 题目描述 思路及解法 1.川建一个set集合存储最长的无重复的字符&#xff1b; 2.创建双指针p、q&#xff0c;每次当q指针指向的字符不在set集合中时将其添加到set集合中让q指针后移&#xff0c;并且更新…

【算法每日一练]

目录 今日知识点&#xff1a; 辗转相减法化下三角求行列式 组合数动态规划打表 约数个数等于质因数的次方1的乘积 求一个模数 将n个不同的球放入r个不同的盒子&#xff1a;f[i][j]f[i-1][j-1]f[i-1][j]*j 将n个不同的球放入r个相同的盒子&#xff1a;a[i][j]a[i-j][j]a[…

高架学习笔记之需求工程

目录 一、什么是软件需求 二、需求工程 2.1. 需求获取 2.2. 需求分析 2.3. 形成需求规格 2.4. 需求确认 2.5. 需求管理 2.5.1. 变更控制 2.5.2. 版本控制 2.5.3. 需求跟踪 2.5.4. 需求状态跟踪 一、什么是软件需求 软件需求目前没有统一的定义&#xff0c;一般是指用…

Vue3:直接对一个响应式对象数据进行结构复制会丢失响应式效果

一、问题描述 我们在进行路由页面传参的时候&#xff0c;使用query方式传递数据 这个时候&#xff0c;接收数据的组件&#xff0c;会从useRoute的query属性里面获取数据 如果&#xff0c;这里使用结构赋值语法&#xff0c;那么&#xff0c;获取到的数据&#xff0c;会失去响应…

手写一个LRU

import java.util.LinkedHashMap; import java.util.Map;public class LRUCache<K, V> extends LinkedHashMap<K, V> {private final int cacheSize;public LRUCache(int cacheSize) {// 设置访问顺序为访问顺序&#xff0c;即最近访问的元素将被放置在队列尾部sup…