一维前缀和和差分


  • 一维前缀和

因为有i-1所以下标要从1开始存

    int n=1010,a[maxn]={0},sum[maxn]={0};//sum[]为前缀和数组for(int i=1;i<=n;i++){cin>>a[i];sum[i]=sum[i-1]+a[i];//也可以直接在原数组上求前缀和 a[i]=a[i]+a[i-1]}
  • 一维差分

 1.求【l,r】区间内所有元素的和?

    int ans,r,l;ans=sum[r]-sum[l-1];

 2.求数组中连续一段数的和,绝对值最小?

思路:对前缀和的绝对值排序,求最小的

 3.把一个数组从中间p位置分开,使得a[0]+…+a[p-1]与a[p]+a[p+1]+…+a[n-1]差值最小?

思路:前一部分A,后一部分B,整个数组的和all。

要使A-B=A-(all-A)=2*A-all最小,那么就要使2*A最接近all,

4. 两种操作格式:op L R X 。op=1,让区间[L,R]内的元素都减少X;op=0,让区间[L,R]内的元素都增加X,最后再给出一个区间(l,r),求该区间内所有元素的和?

思路:暴力很可能会超时,用差分做。举个执行单次加或者减例子,试一下就明白原因了。

    int b[maxn]={0},sum={0},add=0;if(op==1)//都减少{b[L]-=x;b[R+1]+=x;}if(op==0)//都增加{b[L]+=x;b[R+1]=-=x;}for(int i=1;i<=n;i++){add+=b[i];sum[i]=sum[i-1]+a[i]+add;}cout<<sum[r]-sum[l-1]<<endl;

二维前缀和和二维差分


  • 二维前缀和

i和j都要从1开始

    //n*m大小的二维数组int a[maxn][maxn],sum[maxn][maxn]={0};for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cin>>a[i][j];sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+a[i][j];}}
  • 二维差分

参考博客https://blog.csdn.net/k_r_forever/article/details/81775899

 1.求A(x1,y1)和B(x2,y2)所围成的矩形内所有元素的和,A在B的左上方

    int x1,y1,x2,y2,ans;ans=sum[x2][y2]-sum[x2][y1-1]-sum[x1-1][y2]+sum[x1-1][y1-1];//实在记不住就举个简单的例子试试

模版题:https://blog.csdn.net/Cassie_zkq/article/details/88667948

2.和一维差分的第四个问题类似,让(x1,y1)和(x2,y2)矩形内的数都加x(应该是+吧,我觉得,看其他博主的博客都没有讲这是在加还是减,我暂且推测是加,欢迎纠错,目前还没有找到例题)

    int b[maxn][maxn]={0},x1,y1,x2,y2;if(op==1)//加上一个数{b[x1][y1]+=x; b[x2+1][y2+1]+=x;b[x1][y2+1]-=x; b[x2+1][y1]-=x;}for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){//暂时不会写了(捂脸),要不举个例子试一下emmm,请大佬赐教}}

树上差分(待学)


【总结】前缀和与差分(一维差分、二维差分、树上差分(待学!))相关推荐

  1. 前缀和与差分那些不得不说的事(一维,二维)公式与图解详细解说

    前言: 最近实验室的小伙伴们都开始学习前缀和和差分了呢,阿皓也发现这两个东西确实是不容易理解啊.尤其是那个二维差分,很容易跟别的东西弄混,甚至有些同学们现在还不知道二维差分是个什么东东.所以呢,阿皓就 ...

  2. 关于一维和二维数据的差分和梯度的计算(使用 num.diff() 和 numpy.gradient() )

    关于一维数据的差分和梯度的计算 一维数据的差分公式: 一阶差分: 一阶前向差分:下一个值与当前值的差 f(xk)=f(xk+1)−f(xk)f(x_k) = f(x_{k+1}) - f(x_k)f( ...

  3. linux c语言 malloc动态分配指针,C语言malloc函数为一维,二维,三维数组分配空间...

    c语言允许建立内存动态分配区域,以存放一些临时用的数据,这些数据不必在程序的声明部分定义,也不必等到函数结束时才释放,而是需要时随时开辟,不需要时随时释放,这些数据存储在堆区.可以根据需要,向系统申请 ...

  4. C# 指定格式的字符串截成一维数组(二维数组)的操作类

    指定格式的字符串截成一维数组(二维数组)的操作类 做项目时经常会遇到将"1,3,a,b,d"截成一维数组或将"1,a;2,b;3,c;4,d"截成二维数组.虽然 ...

  5. 数学建模——一维、二维插值模型详解Python代码

    数学建模--一维.二维插值模型详解Python代码 一.一维插值 # -*-coding:utf-8 -*- import numpy as np from scipy import interpol ...

  6. 如何将多个一维列表转化为二维列表_数据分析2_如何处理一维、二维数据

    吞一块大饼,还不如切成小块吃得香 常见的数据集,要么是数列,要么是表格: 因此,数据分析最首要的是,处理一维.二维数据. 主要知识点可参考如图. 如需要,可点击以下百度网盘链接下载数据分析基础知识图P ...

  7. 一维转二维_Excel – 一维表和二维表相互转换,只要一个“=”搞定

    关于一维表和二维表的互相转化方法,我真的写过很多种了.且不说在各种案例中顺带提到的技巧,单独开篇讲的,就有以下这些: (头条号功能维护中,暂时无法添加超链接,有兴趣的读者请关注我,查看下历史记录吧) ...

  8. c 语言 二维数组地址,C/C++ 关于一维或二维数组首地址表示含义

    C/C++ 关于一维或二维数组首地址表示含义 发布时间:2020-06-26 10:35:21 来源:51CTO 阅读:210 作者:sonissa 这是一个经常会忘却的知识点,最近也一直在吃这方面的 ...

  9. Andro Studio 基于Zing一维码二维码扫描代码

    现在一维码二维码在我们的日常生活中使用如此的广泛,所以拥有扫码功能的APP变得非常普遍,一个安卓APP需要扫码功能就要用到zxing了,zxing是谷歌开源的让开发者更方便使用摄像头的库,而我们常用的 ...

  10. C语言动态开辟数组(一维与二维)【malloc() free()】

    了解并熟悉malloc(),calloc(),realloc(),free()等动态开辟函数. 重点使用malloc()与free()进行数组的动态开辟! 一.认识malloc().free() C+ ...

最新文章

  1. SQL基础---增删查询操作
  2. 7.13 T2 Shit 题(shit)
  3. 分布式服务Dubbo+Zookeeper安全认证
  4. 解决debian apt-get upgrade 错误triggers ci file contains unknown directive `interest-noawait'
  5. python编写爬虫的步骤-python网络爬虫(二)编写第一个爬虫
  6. iOS中MVC设计模式
  7. ZooKeeper布式集群安装及使用
  8. Exploiting the Syntax-Model Consistency for Neural Relation Extraction-学习笔记
  9. 游戏引擎cocos2d-android使用大全
  10. F#学习之路(2) 深刻理解函数(上)
  11. 【玩味西班牙】之一:初识餐前小吃——达帕斯(TAPAS)
  12. android 代码水印,Android实现为图片添加水印
  13. 图文详解贷中监控报表与资产质量分析全过程
  14. 基金指数温度怎么算_壁挂炉采暖费怎么算?从两千到八百,内行人教你别再花冤枉钱...
  15. Hive 与 RDBMS的区别
  16. 文件分配表(File Allocation Table)入门
  17. 函数名应用,闭包,装饰器初识
  18. OpenSSL密码库算法笔记——第5.4章 椭圆曲线点的简介
  19. 线程、进程和协成对比
  20. crontab、cron、at、atq、batch、ps命令练习题

热门文章

  1. 应用程序中的服务器错误
  2. Microsoft Dynamic CRM 自定义重复检测功能
  3. Unity 性能优化经验整理
  4. percona mysql 编译参数_Linux 下编译安装 MySQL(Percona Server) 5.6
  5. leetcode 打印_leetcode多线程之按序打印
  6. rpm安装mysql指定数据仓库_linux(center OS7)安装JDK、tomcat、mysql 搭建java web项目运行环境-Go语言中文社区...
  7. AspNet WebApi OData 学习
  8. 关于Python编码这一篇文章就够了
  9. Linux命令——set 和 unset
  10. 《BGP设计与实现》一2.11 总结