【算法】前缀和

news2024/11/30 0:38:38

作者:指针不指南吗
专栏:算法篇

🐾要学会在纸上打草稿,这个很重要🐾

文章目录

    • 1.什么是前缀和?
    • 2.怎么求前缀和?
    • 3.前缀和有什么用?
    • 4.进阶二维:矩阵和

前缀和 主打一个记公式

1.什么是前缀和?

原数组

a1 , a2 , a3 , a4 , a5 , a6 , a7

前缀和

s1=a1;

s2=a1+a2;

s3=a1+a2+a3;

si=a1+a2+a3+…+ai

前缀和实际就是数组前 i 项和


2.怎么求前缀和?

结合定义,解释的很清楚,前 i 项相加即可

思路:第 i 个前缀和就 = 前一个前缀和 + 第 i 个元素

但是注意!!!循环开始从1开始,s0=0;

  • 第一种

    易懂但用两个数组

for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
    	s[i]+=a[i];
	}
  • 第二种

    优化版:只需要一个数组

for(int i=1;i<=;i++){
		scanf("%d",&s[i]);
		s[i]+=s[i-1];
	}

3.前缀和有什么用?

作用只有一个:求区间和

求区间使用前缀和可以降低时间复杂度,更加方便

求区间[l,r]中元素的和:

s [ l ~ r ] = s [ r ] - s [ l -1 ]

这里解释了为什么写前缀和的时候,从1开始,并且s0=0 通用的,对 s[1~

n]也适用

例如,求数组第a个到第b个的子数组的和

 while(m--){
        int a,b;
        cin>>a>>b;
        cout<<s[b]-s[a-1]<<endl;
    }

4.进阶二维:矩阵和

求黄色部分的子矩阵和

黄=整个-绿-蓝+混

S[i, j] = 第i行j列格子左上部分所有元素的和

以(x1, y1)为左上角,(x2, y2)为右下角的子矩阵的和为:

S[x2, y2] - S[x1 - 1, y2] - S[x2, y1 - 1] + S[x1 - 1, y1 - 1]

  • 代码实现
#include<iostream>
using namespace std;

const int N=1010;

int s[N][N];

int n,m,q;

int main(){
    cin>>n>>m>>q;
    
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++){
            cin>>s[i][j];
            s[i][j]+=s[i-1][j]+s[i][j-1]+s[i-1][j-1];
        }
    
    while(q--){
        int x1,y1,x2,y2;
        cin>>x1>>y1>>x2>>y2;
        cout<<s[x2][y2]-s[x1-1][y2]-s[x2][y1-1]+s[x1-1][y1-1];
    }
    return 0;
}

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

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

相关文章

四数之和-力扣18-java排序+双指针

一、题目描述给你一个由 n 个整数组成的数组 nums &#xff0c;和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] &#xff08;若两个四元组元素一一对应&#xff0c;则认为两个四元组重复&#xff09;&#xff1a…

【C++】十分钟带你入门类和对象(上)

目录零 介绍一 面向过程和面向对象的初步认识二 类的引入三 类的定义四 类的访问限定符及封装4.1 访问限定符4.2 封装五 类的作用域六 类的实例化七 类对象模型7.1 如何计算类对象大小7.2 类对象的存储方式猜测7.3 结构体内存对齐规则八 this指针8.1 this指针的引出8.2 this指针…

leaflet 本地上传KML文件,在地图上解析显示图形(060)

第060个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中本地上传kml文件,利用解析此kml文件,在地图上显示图形。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共114行)安装加载 leaflet-kml相关AP…

Ansible中Playbook的编写

目录 一、playbook 1 简介 2 playbook语法 3 playbook示例 检测语法 列出任务 列出tag 指定执行主机 执行yaml文件 4 playbook基础 主机与用户 Tasks 列表 一、playbook 1 简介 Playbook与ad-hoc相比,是一种完全不同的运用。 playbook是一种简单的配置管理系统…

2.13日报

完成官网国际化配置 Spring boot国际化支持 当我们web项目涉及到国外部署或者国外用户使用时&#xff0c;需要展示不同语言信息&#xff0c;所以就需要国际化支持&#xff0c;下面将讲解Springboot国际化支持操作 1. 修改Springboot application.yml配置 spring: messages…

【Linux】NTP时间同步服务与NFS网络文件共享存储服务器(配置、测试)

一、NTP时间同步服务1、NTP介绍NTP服务器【Network Time Protocol&#xff08;NTP&#xff09;】是用来使计算机时间同步化的一种协议&#xff0c;它可以使计机对其服务器或时钟源&#xff08;如石英钟&#xff0c;GPS等等)做同步化&#xff0c;它可以提供高精准度的时间校正&a…

Android12之apex调试

1.问题在调试libtinyalsa.so中添加log后&#xff0c;但是发现push so后&#xff0c;却没有log打印&#xff0c;why&#xff1f;2.分析以下为libtinyalsa.so的位置/system/lib64/libtinyalsa.so /system/lib/libtinyalsa.so /apex/com.android.vndk.v31/lib64/libtinyalsa.so /a…

C语言rewind和fseek函数的用法详解

前面介绍的文件读写函数都是顺序读写&#xff0c;即读写文件只能从头开始&#xff0c;依次读写各个数据。但在实际开发中经常需要读写文件的中间部分&#xff0c;要解决这个问题&#xff0c;就得先移动文件内部的位置指针&#xff0c;再进行读写。这种读写方式称为随机读写&…

C语言( 动态内存分配)

目录 一.malloc()和free()(原型都在stdlib.h头文件&#xff09; 1.malloc() 2.free()函数 3.案例演示 二.calloc() 三.realloc&#xff08;&#xff09; 在在C语言的内存当中&#xff0c;针对不同的数据我们所存放的位置都是不一样的。内存栈区和静态区系统会自动创建和销毁&am…

RA4M2开发(3)----读取ISL29035数据,并在OLED上显示,串口打印

概述 首先导入必要的库文件&#xff0c;包括I2C驱动和OLED驱动。在代码中配置I2C接口&#xff0c;并初始化I2C驱动。配置ISL29035传感器&#xff0c;包括配置传感器的工作模式和量程。使用I2C读取ISL29035传感器的数据&#xff0c;并将其存储在变量中。初始化OLED驱动&#xf…

【机器学习】第二章-模型评估与选择-西瓜书笔记

文章目录为什么要进行模型评估&#xff1f;- 选择模型与参数在何种数据集上对训练误差进行评估&#xff1f;- 训练集在何种数据集上对泛化误差进行评估&#xff1f;- 测试集如何划分测试集&#xff1f;1 留出法2 交叉验证法3 自助法模型选择和调参的区别&#xff1f;如何模型选…

Pytest学习笔记

Pytest学习笔记 1、介绍 1.1、单元测试 单元测试是指在软件开发当中&#xff0c;针对软件的最小单位&#xff08;函数&#xff0c;方法&#xff09;进行正确性的检查测试 1.2、单元测试框架 测试发现&#xff1a;从多个py文件里面去找到我们测试用例测试执行&#xff1a;按…

WebDAV之葫芦儿·派盘+网盘精灵

网盘精灵 支持WebDAV方式连接葫芦儿派盘。 推荐一款让您的iPhone、iPod、iPad 变成WebDav客户端的软件,支持从WebDav服务器连接葫芦儿派盘服务进行上传和下载件。 网盘精灵让您的iPhone、iPod、iPad 变成WebDav客户端。功能:WebDav操作、文件共享、本地文件管理

jstack排查cpu占用高[复习]

这样就可以看到占用CPU高的代码位置。 总结&#xff1a;就是先查到占用高的应用和具体的线程&#xff0c;然后根据线程到堆积信息查找即可。 不过堆栈信息非十进制&#xff0c;需提前把线程号转为十六进制。 这样就可以看到占用CPU高的代码位置。 总结&#xff1a;就是先查到…

JavaScript------面向对象

目录 一、面向对象编程&#xff08;OOP&#xff09; 基本概念 二、类 1、语法 2、通过类创建对象 3、类的属性 4、类的方法 5、构造函数 三、面向对象的三个特点 1、封装 如何确保数据的安全&#xff08;实现封装的方式&#xff09;&#xff1a; 2、继承 在子类中&a…

【LeetCode】每日一题(4)

目录 题目&#xff1a;1124. 表现良好的最长时间段 - 力扣&#xff08;Leetcode&#xff09; 题目的接口&#xff1a; 解题思路&#xff1a; 代码&#xff1a; 过啦&#xff01;&#xff01;&#xff01; 写在最后&#xff1a; 题目&#xff1a;1124. 表现良好的最长时间…

算法思想 - 回溯算法

Backtracking(回溯)属于 DFS, 本文主要介绍算法中Backtracking算法的思想。回溯算法实际上一个类似枚举的搜索尝试过程&#xff0c;主要是在搜索尝试过程中寻找问题的解&#xff0c;当发现已不满足求解条件时&#xff0c;就“回溯”返回&#xff0c;尝试别的路径。回溯法是一种…

ChatGPT 类 AI 软件供应链的安全及合规风险

AIGC将成为重要的软件供应链近日&#xff0c;OpenAI推出的ChatGPT通过强大的AIGC&#xff08;人工智能生产内容&#xff09;能力让不少人认为AI的颠覆性拐点即将到来&#xff0c;基于AI将带来全新的软件产品体验&#xff0c;而AI也将会成为未来软件供应链中非常重要的一环。在O…

【项目精选】基于WEB的仓库管理系统的设计与实现(论文+视频+源码)

点击下载源码 仓库物品的管理是与我们的日常生活息息相关的一个重大问题。随着我国经济飞速的发展&#xff0c;改革开放的不断深入&#xff0c;企业要想在激烈的市场竞争中立于不败之地&#xff0c;要想继续的发展与生存&#xff0c;没有现代化的管理方式与方法是万万不行的&am…

torch.nn.parameter 生成可更新的 tensor (requires_grad = True)

torch.nn.parameter 是 PyTorch 中的一种特殊类型的 tensor&#xff0c;它主要用于存储神经网络中的参数。这些参数可以被自动求导和被优化器自动更新。使用 torch.nn.Parameter 定义的tensor 会被自动添加到模型的参数列表中。 \quadtorch.nn.Parameter 是继承自 torch.Tensor…