一维/二维 前缀和及差分

本文详细介绍了AcWing平台上的几道关于前缀和和差分的题目,包括一维和二维前缀和的概念及计算方法,并通过图解展示了如何在已知前缀和数组的情况下求子矩阵的和。此外,还解释了差分数组的性质,即前缀和之后形成的数组即为原数组,并给出了二维差分矩阵中更新区域值的步骤。
摘要由CSDN通过智能技术生成

AcWing 795. 前缀和

听名字就是 数组当前位置 内部存的数 是他之前及本身的 和
原本a[10]存的自己 现在 sum[0]=a[0],sum[1]=a[0]+a[1];以此类推。

AC代码

#include<iostream>
using namespace std;
const int N=1e5+10;
int num[N];
int main(){
   
    int n,m;
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++){
   
        int x;
        scanf("%d",&x);
        num[i]=num[i-1]+x;
    }
    while(m--){
   
        int l,r;
        scanf("%d%d",&l,&r);
        cout<<num[r]-num[l-1]<<endl;
    }
    return 0;
}

AcWing 796. 子矩阵的和

就是求 二维数组给定区域 矩阵和 具体看看题意

图解 :二维 前缀和 数组的创建

与后文颜色代表含义相同

浅蓝色填充区:为浅蓝色方块区域 的和 即 深蓝色方块所在数组位置的数值
黄色区域: 第一部分 和
咖啡色区域: 第二部分和
红色方块; 黄色 和 咖啡色 公共区域
深蓝色方块: 填充区域 之和(所在数组位置的值)
橘黄色方块:黄色区域之和(所在数组位置的值)
红褐色方块:咖啡色区域之和(所在数组位置的值)
绿色方块:黄色 和 咖啡色 公共之和(所在数组位置的值)

求 填充区域之和
需要用 黄色填充区之和(橘黄色方块所在数组位置的值)加上
咖啡色区域之和(红褐色方块所在数组位置的值) 减去
黄色 和 咖啡色 公共区域之和(绿色方块所在数组位置的值) 加上
蓝色填充区 所在数组的和(未计算之前是本身非和)
在这里插入图片描述

图解 :计算 所求区域之和(已经求出二维前缀和数组前提下)

蓝色: 求和区域
黄色: 第一个 排除区
咖啡色: 第二个 排除区
红色矩形:排除 公共区
由于用的前缀和数组
深蓝色方块 所在数组位置为 (0,0)(xx,yy)整个填充区域的和
需要减去 黄色区域(橘黄色方块所在数组位置)再减去
咖啡色区域(红褐色方块所在数组位置) 并 加上
公共区(因为减去了两次嘛~)(绿色 方块所在数组)
在这里插入图片描述

AC代码

#include<iostream>
using namespace std;
con
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值